2011-01-24 21 views
14

Parece demasiada boilterplate para convertir una matriz json en string []. ¿Hay alguna manera más simple y elegante?JSONArray a string array

final JSONArray keyArray = input.getJSONArray("key"); 
String[] keyAttributes = new String[keyArray.length()]; 
for(int i = 0; i < keyArray.length(); i++) { 
    keyAttributes[i] = keyArray.getString(i); 
} 
+1

Assuming org.json.JSONArray. No, eso es tan bueno como se pone. –

Respuesta

6

Uso gson. Tiene una API mucho más amigable que org.json.

Collections Examples (del User Guide):

Gson gson = new Gson(); 
Collection<Integer> ints = Lists.immutableList(1,2,3,4,5); 

//(Serialization) 
String json = gson.toJson(ints); ==> json is [1,2,3,4,5] 

//(Deserialization) 
Type collectionType = new TypeToken<Collection<Integer>>(){}.getType(); 
Collection<Integer> ints2 = gson.fromJson(json, collectionType); 
//ints2 is same as ints 
+2

Gracias. int [] ints2 = gson.fromJson ("[1,2,3,4,5]", int []. clase); algo así es lo que estaba buscando. – Fakrudeen

0

No hay ningún método integrado que hacer esto y yo creo que es la forma más sencilla

Aquí es similar topic que le ayudará a

+0

Incluso el uso de una biblioteca 'conocida' haría por mí. – Fakrudeen

2

Es feo, pero aunque no lo crean esto funciona, pero sólo para los elementos que no tienen comas:

String[] keyAttributes = keyArray.toString.substring(1,keyArray.toString.length-1).replaceAll("\"","").split(",") 

ver el comentario de SK9 continuación, EG: "[\",\", \"a,b\"]" sería incorrectamente analizado como ["", "", "a", "b"] en lugar de [",", "a,b"]

+1

Esto no funciona. ¿Qué sucede si cada artículo es una cadena y al menos uno contiene una coma? p.ej. "[\", \ ", \" a, b \ "]" – SK9

+0

SK9 tiene toda la razón, ¡esto no funcionaría con ninguna tecla con comas! –

0

¡Tienes razón! Incluso la respuesta @Sean Patrick Floyd's es demasiado boilterplate para encubrir una matriz JSON a la cadena [] o cualquier otro tipo de clase de matriz. Más bien esto es lo que me parece ser elegante:

JsonArray jsonArray = input.getAsJsonArray("key"); 

Gson gson = new Gson(); 
String[] output = gson.fromJson(jsonArray , String[].class) 

NOTA 1: JsonArray debe haber una matriz de cadenas, para el ejemplo anterior, sin ningún tipo de nombres de propiedades. Por ejemplo:

{key:["Apple","Orange","Mango","Papaya","Guava"]} 

Nota 2:JsonObject clase usada arriba es de com.google.gson biblioteca y no la clase de JSONObjectorg.json biblioteca.

1
public String[] jsonArrayToStringArray(JSONArray jsonArray) { 
    int arraySize = jsonArray.size(); 
    String[] stringArray = new String[arraySize]; 

    for(int i=0; i<arraySize; i++) { 
     stringArray[i] = (String) jsonArray.get(i); 
    } 

    return stringArray; 
};