2011-01-24 12 views
14

Wygląda na zbyt wiele boilterplate do konwersji tablicy json na ciąg []. Czy istnieje jakiś prostszy i elegancki sposób?JSONArray do tablicy ciągów

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

Zakładając org.json.JSONArray. Nie, to jest tak dobre, jak to tylko możliwe. –

Odpowiedz

6

Zastosowanie gson. Ma znacznie bardziej przyjazny interfejs API niż org.json.

Collections Examples (od 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

Dzięki. int [] ints2 = gson.fromJson ("[1,2,3,4,5]", int []. class); czegoś takiego właśnie szukałem. – Fakrudeen

0

Nie ma żadnych wbudowanych w sposób, który to zrobić i myślę, że jest to najprostszy sposób

Oto similar topic które pomogą Ci

+0

Nawet przy użyciu "dobrze znanej" biblioteki zrobiłbym to dla mnie. – Fakrudeen

2

Jest brzydki, ale wierzcie lub nie działa, ale tylko na elementach, które nie mają przecinkami:

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

patrz komentarz SK9 jest poniżej, EG: "[\",\", \"a,b\"]" zostałby niepoprawnie przeanalizowany jako ["", "", "a", "b"] zamiast [",", "a,b"]

+1

To nie działa. Co się stanie, jeśli każdy element jest ciągiem, a co najmniej jeden zawiera przecinek? na przykład "[\", \ ", \" a, b \ "]" – SK9

+0

SK9 ma absolutną rację, to nie zadziałałoby dla żadnego klawisza z przecinkami! –

0

Masz rację! Nawet odpowiedź @Sean Patrick Floyd's jest zbyt dużą płytką boilterplate, aby ukryć tablicę JSON do napisu [] lub dowolnego innego typu klasy tablicowej. Raczej o to, co uważam za elegancki:

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

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

UWAGA 1: JsonArray musi być tablicą ciągów, dla powyższego przykładu, bez żadnych nazw właściwości. Np:

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

Uwaga 2:JsonObject klasa stosowany jest od ponad com.google.gson biblioteki, a nie klasy JSONObject od org.json bibliotece.

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; 
}; 
Powiązane problemy