2013-08-24 16 views
85

Ho un file JSON come questo:Utilizzando GSON per analizzare una matrice JSON

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

Prima quando i file hanno un elemento radice userei:

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

codice, ma non riesco a pensare come codificare la classe Wrapper in quanto l'elemento radice è un array.

Ho provato con:

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

con:

ma non hanno avuto fortuna. In quale altro modo posso leggere questo utilizzando questo metodo?

P.S ho avuto questo lavoro utilizzando:

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

ma preferirei sapere come farlo (se possibile) con entrambi i metodi.

+2

ci Sei sicuro sia virgola dopo gli elementi del titolo? Se li rimuovi 'Wrapper [] data = gson.fromJson (classe jElement, Wrapper [].)' Funziona bene per me. – Pshemo

+0

Questo è il problema .. un errore così semplice! – Edd

risposta

88

Il problema è causato dalla virgola dopo l'ultimo elemento dell'array (dopo ogni title). Se si rimuove e modificare i dati di

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

Wrapper[] data = gson.fromJson(jElement, Wrapper[].class); funzionerà benissimo.

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

class Wrapper{ 
    int number; 
    String title;  
} 

Sembra funzionare correttamente. Ma c'è una virgola , in più nella stringa.

[ 
    { 
     "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()); 
} 

chiamata di esempio:

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

Per me, sto trasformando i miei oggetti in un elenco di LinkedTreeMap invece di un elenco di oggetti Specification (ad esempio). –

+0

Dove hai preso la lezione di GsonUtils? –

+0

'' GsonUtils'' è la classe in cui ha messo il proprio metodo '' toList() ''. – user1438038

Problemi correlati