2013-08-24 24 views
85

ich eine JSON-Datei wie diese habe zu analysieren:Gson Mit einem JSON-Array

[ 
    { 
     "number": "3", 
     "title": "hello_world", 
    }, { 
     "number": "2", 
     "title": "hello_world", 
    } 
] 

Vor wenn Dateien, die ich verwenden würde ein Wurzelelement haben:

Wrapper w = gson.fromJson(JSONSTRING, Wrapper.class); 

Code aber ich nicht denken kann, Wie man die Wrapper Klasse als Wurzelelement codiert, ist ein Array.

ich verwendet haben versucht:

Wrapper[] wrapper = gson.fromJson(jsonLine, Wrapper[].class); 

mit:

Aber haben kein Glück gehabt. Wie sonst kann ich das mit dieser Methode lesen?

P. S Ich habe bekam dies mit zu arbeiten:

JsonArray entries = (JsonArray) new JsonParser().parse(jsonLine); 
String title = ((JsonObject)entries.get(0)).get("title"); 

Aber ich würde es vorziehen, zu wissen, wie es zu tun (wenn möglich) mit beiden Methoden.

+2

Sind Sie sicher, gibt es Komma nach Titelelemente? Wenn Sie sie entfernen 'Wrapper [] data = gson.fromJson (jElement, Wrapper []. Class);' funktioniert gut für mich. – Pshemo

+0

Das ist das Problem .. so ein einfacher Fehler! – Edd

Antwort

88

Problem wird durch Komma nach dem letzten Element Ihres Arrays (nach jedem title) verursacht. Wenn Sie es entfernen und Ihre Daten ändern, um

[ 
    { 
     "number": "3", 
     "title": "hello_world" 
    }, { 
     "number": "2", 
     "title": "hello_world" 
    } 
] 

Wrapper[] data = gson.fromJson(jElement, Wrapper[].class); wird funktionieren.

33
Gson gson = new Gson(); 
Wrapper[] arr = gson.fromJson(str, Wrapper[].class); 

class Wrapper{ 
    int number; 
    String title;  
} 

Scheint gut zu funktionieren. Aber es gibt ein extra , Komma in Ihrer Zeichenfolge.

[ 
    { 
     "number" : "3", 
     "title" : "hello_world" 
    }, 
    { 
     "number" : "2", 
     "title" : "hello_world" 
    } 
] 
9
public static <T> List<T> toList(String json, Class<T> clazz) { 
    if (null == json) { 
     return null; 
    } 
    Gson gson = new Gson(); 
    return gson.fromJson(json, new TypeToken<T>(){}.getType()); 
} 

Beispielaufruf:

List<Specifications> objects = GsonUtils.toList(products, Specifications.class); 
+2

Für mich verwandelt dies meine Objekte in eine Liste von LinkedTreeMap statt einer Liste von Specification-Objekten (zum Beispiel). –

+0

Woher hast du GsonUtils Klasse? –

+0

'' GsonUtils'' ist die Klasse, in der er seine eigene '' toList() '' Methode verwendet. – user1438038