2010-12-29 18 views
13

Soy relativamente nuevo en la programación de Java y necesito analizar un objeto JSON complejo a través del cable. He estado leyendo documentación sobre GSON el pasado día y no he tenido mucha suerte de ser capaz de analizar completamente este tipo de estructura:Usar GSON en Android para analizar un objeto JSON complejo

{ 
    '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...], 
} 

he sido capaz de conseguir que funcione de manera similar a la pregunta, pero this no puede entender cómo hacer funcionar ese nivel de matriz adicional.

Respuesta

18

La forma correcta de hacerlo utilizando GSON en el formato que estoy buscando es:

//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

¿cómo obtendrá las etiquetas del código anterior? –

+0

¿A qué etiquetas hace referencia? – wajiw

+2

Dentro de JSONArray of Events, hay uno más JSONArray que tiene etiquetas de nombre? Entonces, ¿pueden aclarar cómo usar esta clase de evento para obtener las etiquetas JSONArray? –

7

Java tiene su propio analizador JSON: podemos usarlo en Android también.

A continuación puede ver cómo puede obtener todos los eventos de su Cadena.

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(); 
    } 

Tenga en cuenta: El objeto JSON (de su pregunta) lanzará una excepción porque no es válido (no estoy seguro, pero que se vea como un objeto de JavaScript). Hay que añadir algunas citas para cada propiedad (clave) y los ecape con \ (\ ").
Este tool es muy agradable para probar si un JSON cuerdas es válida o no.

+6

OP pregunta cómo utilizar GSON, que es mucho más conveniente que el uso de la incorporada en el analizador JSON directamente Su respuesta es muy buena, pero no para esto. pregunta particular – espinchi

+0

tiene razón. Disculpe: la próxima vez voy a tener más cuidado. Gracias. –

Cuestiones relacionadas