2012-03-11 21 views
5

Estoy intentando analizar la siguiente respuesta JSON con GSON:Deserialising una respuesta JSON con GSON, utilizando Java

{ 
    "total": 15, 
    "page": 2, 
    "pagesize": 10, 
    "rep_changes": [ 
    { 
     "user_id": 2341, 
     "post_id": 2952530, 
     "post_type": "question", 
     "title": "unprotected access to member in property get", 
     "positive_rep": 5, 
     "negative_rep": 0, 
     "on_date": 1275419872 
    }, 
    { 
     "user_id": 2341, 
     "post_id": 562948, 
     "post_type": "question", 
     "title": "Do you have any recommendations on Blend/XAML books/tutorials for designers?", 
     "positive_rep": 20, 
     "negative_rep": 0, 
     "on_date": 1270760339 
    } 
    .... 
} 

Estas son las dos clases he definido (cada clase contiene los captadores y definidores respectivos):

public class Reputation { 
    private int total; 
    private int page; 
    private int pagesize; 
    private List<RepChanges> rep_changes; 

public class RepChanges { 
    private int user_id; 
    private int post_id; 
    private String post_type; 
    private String title; 
    private int positive_rep; 
    private int negative_rep; 
    private long on_date; 

he sido incapaz de analizar la clase RepChanges en los rep_changes atributo en la clase reputación. ¿Alguna idea?

Nota: He logrado analizar el total, la página y el tamaño de página (estos no son atributos complejos). Esto es lo que he hecho:

para analizar el total de página y tamaño de página, que se usa (y trabajado muy bien):

Gson gson = new Gson(); 
Reputation rep = gson.fromJson(jsonText, Reputation.class); 

//doing this works: 
int page = rep.getPage(); 
System.out.println(page); 

Sin embargo, cuando se hace:

List<RepChanges> rep_changes = rep.getRep_changes(); 
for(RepChanges r : rep_changes){ 
    System.out.println(r.toString()); 
} 

I (técnicamente) no recibe un error, pero el siguiente (que parece una posición de memoria):

[email protected] 
+0

¿Cuál es el problema cuando intenta deserializarlo? – ColinD

+0

@colinD, edité el problema, expliqué un poco más ... espero que nos dé una mejor idea;) – savagius

Respuesta

3

En su Repchanges clase, configure su propio método toString() similar a este:

public String toString() 
{ 
    return "RepChanges [user_id=" + user_id + 
      ", post_id=" + post_id + 
      ", post_type=" + post_type + 
      ", title=" + title + 
      ", positive_rep=" + positive_rep + 
      ", negative_rep=" + negative_rep + 
      ", on_date=" + on_date + "]"; 
} 
+0

y en lugar del bucle foreach, simplemente llame al método de este, supongo ¿no? Pero, ¿cómo puedo estar seguro de que los elementos de la respuesta JSON se almacenan realmente dentro del atributo en el que lo quiero almacenar? Gracias :) – savagius

+0

@savagius: Según su descripción, el JSON se está deserializando correctamente. Sin embargo, la implementación predeterminada 'toString()' para un objeto devuelve una cadena en el formato que describió: la clase del objeto y la ubicación de la memoria. Cambiar la implementación 'toString()' le permite ver los datos reales contenidos en cada objeto 'RepChanges'. – ColinD

+0

Hola otra vez, muchachos, mis disculpas por no responder de inmediato, intenté probar la respuesta de @deporter ... En teoría, su respuesta debería ser válida (sin embargo, creo que me faltan detalles menores por los que ninguno es siendo impreso). A pesar de esto, depuré mi método y parece que el objeto RepChange (clase) se está llenando como debería ser: D Gracias por su tiempo :) – savagius

Cuestiones relacionadas