2010-12-29 10 views
13

Sono relativamente nuovo alla programmazione Java e ho bisogno di analizzare un oggetto JSON complesso attraverso il cavo. Ho letto la documentazione sulla GSON giorno passato e non ho avuto molta fortuna di essere in grado di analizzare pienamente questo tipo di struttura:Utilizzo di GSON in Android per analizzare un oggetto JSON complesso

{ 
    'Events' : [{ 
    'name' : 'exp', 
    'date' : '10-10-2010', 
    'tags' : ["tag 1", "tag2", "tag3"] 
    },...more events...], 
    'Contacts' : [{ 
    'name' : 'John Smith', 
    'date' : '10-10-2010', 
    'tags' : ["tag 1", "tag2", "tag3"] 
    },...more contacts...], 
} 

Sono stato in grado di farlo funzionare in modo simile a this domanda, ma non riesco a capire come ottenere quel livello addizionale dell'array per funzionare.

risposta

18

Il modo corretto per farlo utilizzando GSON nel formato che sto cercando è:

//somewhere after the web response: 
Gson gson = new Gson(); 

Event[] events = gson.fromJson(webServiceResponse, Event[].class); 


//somewhere nested in the class: 
static class Event{ 
    String name; 
    String date; 

    public String getName() 
    { 
     return name; 
    } 

    public String getDate() 
    { 
     return date; 
    } 

    public void setName(String name) 
    { 
     this.name = name; 
    } 

    public void setDate(String date) 
    { 
     this.date = date; 
    } 
} 
+2

come otterremo i tag dal codice sopra? –

+0

Quali tag stai referenziando? – wajiw

+2

all'interno di JSONArray of Events esiste un altro JSONArray con tag di nome? Quindi, per favore, puoi chiarire come usare questa classe Event per ottenere i tag JSONArray? I tag –

7

Java ha il suo parser JSON: possiamo usarlo anche su Android.

Qui di seguito puoi trovare come ottenere tutti gli eventi dalla stringa.

String TAG  = "JSON EXAMPLE"; 
    String jsonString = "{\"Events\" : [{\"name\" : \"exp\",\"date\" : \"10-10-2010\",\"tags\" : [\"tag 1\",\"tag 2\",\"tag 3\"]}],\"Contacts\" : [{\"name\" : \"John Smith\",\"date\" : \"10-10-2010\",\"tags\" : [\"tag 1\",\"tag 2\",\"tag 3\"]}]}"; 

    try { 
     JSONObject jsonObj = new JSONObject(jsonString);  // create a json object from a string 
     JSONArray jsonEvents = jsonObj.getJSONArray("Events"); // get all events as json objects from Events array 

     for(int i = 0; i < jsonEvents.length(); i++){ 
      JSONObject event = jsonEvents.getJSONObject(i); // create a single event jsonObject 
      Log.e(TAG, "Event name:" + event.getString("name") + " date: " + event.getString("date")); 


      JSONArray eventTags = event.getJSONArray("tags"); 

      for(int j = 0; j < eventTags.length(); j++){ 
       Log.e(TAG, "Event tag: " + eventTags.getString(j)); 
      } 

     }   

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

Essere consapevoli: l'oggetto JSON (dalla tua domanda) lancerà un'eccezione perché non è valido (non sono sicuro, ma l'aspetto di un oggetto JavaScript). È necessario aggiungere alcune citazioni per ogni proprietà (chiave) e ecape con \ (\ ").
Questo tool è davvero bello per verificare se una stringa JSON è valido o meno.

+6

OP chiede come utilizzare GSON, che è molto più conveniente che usare il built-in JSON parser direttamente tua risposta è molto buona, ma non per questo. particolare domanda – espinchi

+0

hai ragione, mi dispiace, sarò più attento la prossima volta Grazie –

Problemi correlati