2013-05-25 20 views
5

Sono un principiante in Java/Android e cerco di analizzare JSON con Gson.Gson con nome dinamico (Android)

Sto avendo qualche difficoltà con la parte dei file. Da quello che ho letto dovrei usare MapHash ma non sono sicuro come usarlo in questo codice

Ecco la mia classe principale

InputStream source = retrieveStream(url); 
Gson gson = new Gson(); 
Reader reader = new InputStreamReader(source); 
SearchResponse response = gson.fromJson(reader, SearchResponse.class); 

La classe che fa il parsing

public class SearchResponse { 

    public List<Podcast> podcasts; 

    class Podcast { 

     @SerializedName("files") 
     private List<File> files; 

     @SerializedName("format") 
     private String format; 

     @SerializedName("title") 
     private String title; 

    class File { 
     private String ValueX; 
     private String URLX; 
     } 
    } 
} 

struttura jSON

{ 
"podcasts": [ 
    { 
    "files": [ 
     {"NameA": "ValueA"}, 
     {"NameB": "ValueB"}, 
     {"...": "..."} 
    ], 
    "format": "STRING", 
    "title": "STRING" 
    } 
    ] 
} 

Grazie per il vostro aiuto

ecco un file modificato la struttura del JSON cerco di analizzare http://jsontest.web44.net/noauth.json

+0

È possibile analizzare un JSON anche senza usare GSON. Cosa vuoi ottenere da JSONObject? –

+0

Voglio ottenere sia il nome che il valore. – Keven

+0

Hai già l'oggetto JSON con te, che potrebbe essere una risposta da qualche parte? –

risposta

5

Nella classe File avete 2 attributi: ValueX e URLX. Ma nel tuo JSON si hanno 2 campi NameA e NameB ...

nomi in risposta JSON e la classe deve corrispondere, in caso contrario non sarà possibile ottenere alcun valore ...

A parte questo, la struttura di classe sembra buono, e il codice per deseralizing guarda bene così ... non credo che avete bisogno di HashMap ...


EDIT: Prendendo in considerazione i suoi commenti, si potrebbe usare un HashMap. Si potrebbe cambiare la classe Podcast utilizzando:

@SerializedName("files") 
private List<Map<String,String>> files; 

E si dovrebbe ottenere analizzata correttamente.

È necessario utilizzare un List perché si dispone di un array JSON (circondato da [ ]), quindi è possibile utilizzare Map per consentire nomi di campi diversi.

Si noti che è necessario eliminare la classe File ...

+0

ma il nome e il valore sono casuali. Ho modificato il mio post per riflettere questo. Ho messo un file per mostrare come è strutturato JSON http://jsontest.web44.net/noauth.json – Keven

+0

@Keven vedi modifica – MikO

+0

grazie anche Ho trovato la mia risposta su http://stackoverflow.com/questions/7651953/gson-parsing-dynamic-json-field tranne il mio era come hai detto davvero una lista – Keven