2012-07-01 19 views
5

Tengo un problema al crear una asignación para un json que quiero analizar usando json. Es muy específico, se trata de un archivo json con una matriz json con objetos en él.Analizando archivo json con gson

mi jsonfile comienza así:

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

Así que primero una matriz, que un objeto (lugar) con una gran cantidad de objetos que contiene (i eliminado la mayor parte de ellos, porque eso no es importante para mi pregunta) y algunas matrices (como season_openings).

Mi código de análisis funciona así, estoy usando gson. El inputstream funciona bien.

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

con el JsonResponse clase:

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

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

Pero cuando corro el código me sale un error:

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 

Por supuesto Puedo leer el error: espera un o bjects pero obtiene una matriz. He variado mucho con diferentes jsonresponse.class e incluso con poner toda la matriz json en un objeto json (lo que no es realmente una solución porque tengo que trabajar con este tipo de jsonfile). Pero cada vez que consigo esto o un error similar.

Creo que estoy cerca de una solución, ¿alguien puede ver lo que no puedo y darme una mano de ayuda? Gracias.

+0

Con el ejemplo no válido JSON y el ejemplo incompleto de código Java no válido, las personas que podrían intentar ayudar se quedan adivinando sobre lo que realmente está sucediendo. Es una buena práctica publicar ejemplos mínimos completos que demuestren el problema que se intenta resolver. –

Respuesta

4

intente llamar Gson así:

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

Esto funciona porque el documento JSON es un List, no un objeto que tiene una lista como una de sus propiedades.

+0

¡Gracias, funcionó! – Jasper

+0

intenté: String name = venues.get (12) .getName; Log.i (venuetag, "nombre del lugar 12 es:" + nombre); pero le da al nombre un valor nulo. ¿Lo estoy haciendo bien? Usé venues.size() y me devolvió 471, así que estoy seguro de que mi lista funciona ... – Jasper

+0

@Jasper, supongo que la estructura de datos de Java a la que se deserializa no coincide lo suficiente con la estructura JSON, y Gson por lo tanto, no vincula el elemento "nombre" JSON con el campo "nombre" de Java. –