2012-07-01 22 views
5

Ho un problema nel creare un mapping per un JSON che voglio analizzare usando json. È molto specifico, si tratta di un file JSON con un array JSON con oggetti in esso.Parsing file json con gson

mia jsonfile inizia così:

[ 
    { 
     "venue": { 
      "venue_seasons": [ 
       { 
        "created_at": "2011-12-25T23:00:28Z", 
        "updated_at": "2011-12-28T15:13:53Z", 
        "start_timestamp": 1293840000, 
        "id": 337, 
        "end": "2011-12-24T00:00:00Z", 
        "enabled": true, 
        "start": "2011-01-01T00:00:00Z", 
        "season_openings": [ … ], 
        "end_timestamp": 1324684800 
       }, 
       { … } 
      ], 
      "address": "someadress", 
      "city": "cityname", 
      "name": "name", 
      "created_at": "2011-03-31T07:55:33Z", 
     etcetera 
    } 
    "venue":{another venue 

Quindi, prima una matrice, di un oggetto (luogo), con un sacco di oggetti in esso (ho rimosso la maggior parte di loro, perché quello non è importante per la mia domanda) e alcuni array (come season_openings).

Il mio codice di analisi funziona in questo modo, sto usando gson. L'inputstream funziona bene.

Reader reader = new InputStreamReader(inputStream); 
JsonResponse venueResponse = gson.fromJson(reader, JsonResponse.class);    
List<Venues> results = venueResponse.venue; 

con la JsonResponse classe:

public class JsonResponse { 
    public List<Venues> venue; 
} 

e Venues.class:

public class Venues { 

    public List<VenueSeasons> venue_seasons; 

    @SerializedName("adress") 
    public String getAdress; 

    @SerializedName("city") 
    public String getCity; 

    @SerializedName("country") 
    public String getCountry; etcetera 
} 

Ma quando ho eseguito questo codice ottengo un errore:

Unable to start activity ComponentInfo{com.hera.android.JSON/com.hera.android.JSON.TestParser2Activity}: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 

Naturalmente posso leggere l'errore: si aspetta un o bject ma ottiene una matrice. Ho variato molto con diversi jsonresponse.class e persino con l'inserimento dell'intero array json in un oggetto json (cosa non è realmente una soluzione perché ho bisogno di lavorare con questo tipo di jsonfile). Ma ogni volta che ottengo questo o un errore simile.

Penso di essere vicino a una soluzione, qualcuno può vedere quello che non posso e darmi una mano? Grazie.

+0

Con l'esempio JSON non valido e il codice Java di esempio non valido non valido, la gente che potrebbe tentare di aiutare è lasciata a indovinare su cosa sta realmente accadendo. È una buona pratica pubblicare esempi minimi completi che dimostrino il problema che si sta cercando di risolvere. –

risposta

4

provare a chiamare GSON come questo:

List<Venues> venues = gson.fromJson(reader, new TypeToken<List<Venues>>() {}.getType()); 

Questo funziona perché il documento JSON è un List, non un oggetto che ha una lista come una delle sue proprietà.

+0

Grazie, ha funzionato! – Jasper

+0

ho provato: String name = venues.get (12) .getName; Log.i (venuetag, "nome della sede 12 è:" + nome); ma dà per nome un valore nullo. Lo sto facendo bene? Ho usato venues.size() e ha restituito 471, quindi sono sicuro che la mia lista funzioni ... – Jasper

+0

@Jasper, direi che la struttura dei dati Java che viene deserializzata non corrisponde abbastanza alla struttura JSON, e Gson non sta quindi legando l'elemento "nome" JSON al campo "nome" di Java. –