2012-07-01 56 views
5

Ich habe ein Problem beim Erstellen eines Mappings für einen JSON, die ich mit JSON analysieren möchte. Es ist sehr spezifisch, es handelt sich um eine JSON-Datei mit einem JSON-Array mit Objekten darin.Parsing JSON-Datei mit Gson

meine jsonfile beginnt wie folgt aus:

[ 
    { 
     "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 

Also zuerst ein Array, als ein Objekt (Ort) mit einer Menge von Objekten in sie (i die meisten von ihnen entfernt, weil das ist für meine Frage nicht wichtig) und einige Arrays (wie season_openings).

Mein Parsing-Code funktioniert so, ich benutze Gson. Der Eingangsstrom funktioniert einwandfrei.

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

mit der Klasse JsonResponse:

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

und 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 
} 

Aber wenn ich diesen Code ausführen bekomme ich einen Fehler:

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 

Ofcourse Ich kann den Fehler lesen: Es erwartet ein o Objekte, aber ein Array erhalten. Ich variierte viel mit verschiedenen jsonresponse.class und sogar mit dem Setzen des gesamten json-Arrays in ein json-Objekt (was nicht wirklich eine Lösung ist, weil ich mit diesem Typ von jsonfile arbeiten muss). Aber jedes Mal, wenn ich diesen oder einen ähnlichen Fehler bekomme.

Ich denke, ich bin nah an einer Lösung, kann jemand sehen, was ich nicht kann und mir eine helfende Hand geben? Danke.

+0

Mit dem ungültigen Beispiel JSON und dem unvollständigen ungültigen Beispiel-Java-Code werden Leute, die versuchen zu helfen, ratlos darüber sein, was wirklich vor sich geht. Es ist eine gute Übung, vollständige minimale Beispiele zu veröffentlichen, die das Problem, das versucht wird, zu lösen, demonstrieren. –

Antwort

4

Try Gson wie folgt aufrufen:

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

Dies funktioniert, weil Ihr JSON-Dokument ein List ist, nicht ein Objekt, das eine Liste als eine seiner Eigenschaften hat.

+0

Danke, es hat funktioniert! – Jasper

+0

Ich habe versucht: String name = locations.get (12) .getName; Log.i (venuetag, "Name des Veranstaltungsortes 12 ist:" + Name); aber es gibt für den Namen einen Nullwert. Mache ich das richtig? Ich habe locations.size() verwendet und 471 zurückgegeben, also bin ich mir sicher, dass meine Liste funktioniert ... – Jasper

+0

@Jasper, ich vermute, dass die zu deserialisierende Java-Datenstruktur nicht gut genug mit der JSON-Struktur und Gson übereinstimmt bindet also das JSON "name" -Element nicht an das Java "name" -Feld. –