2012-03-11 4 views
5

Je cherche à analyser la réponse JSON suivante avec GSON:Deserialising une réponse JSON avec GSON, en utilisant 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 
    } 
    .... 
} 

Ce sont les deux classes je définis (chaque classe contient les accesseurs respectifs):

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; 

Je suis incapable d'analyser la classe RepChanges dans les rep_changes attribut dans la classe de réputation. Des pensées?

Remarque: J'ai réussi à analyser total, page et pageize (il s'agit d'attributs non complexes). Voilà ce que je l'ai fait:

Pour analyser le total, la page et pagesize, j'utilisé (et a bien fonctionné):

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

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

Cependant, lorsque vous faites:

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

I (techniquement) ne reçoivent pas une erreur, mais ce qui suit (ce qui semble être un emplacement de mémoire):

[email protected] 
+0

Quel est le problème lorsque vous essayez de le désérialiser? – ColinD

+0

@colinD, j'ai édité le problème, j'ai expliqué un peu plus loin ... espérons que donne une meilleure idée;) – savagius

Répondre

3

Dans votre Repchanges classe, configurez votre propre méthode toString() similaire à celle-ci:

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

et au lieu de la boucle foreach, appelez simplement la méthode, je suppose que non? Mais comment puis-je être sûr que les éléments de la réponse JSON sont réellement stockés dans l'attribut dans lequel je veux le stocker? Merci :) – savagius

+0

@savagius: D'après votre description, le JSON est désérialisé correctement. Cependant, l'implémentation 'toString()' par défaut pour un objet renvoie une chaîne au format que vous avez décrit: la classe de l'objet et l'emplacement de la mémoire. La modification de l'implémentation 'toString()' vous permet de voir les données réelles contenues dans chaque objet 'RepChanges'. – ColinD

+0

Salut encore, les gars, mes excuses pour ne pas répondre immédiatement, j'ai tenté de tester la réponse par @deporter ... En théorie votre réponse devrait être valide (cependant, je pense que je manque quelques détails mineurs à cause de laquelle est en cours d'impression). Malgré cela, j'ai débuggé ma méthode et il semble que l'objet RepChange (class) soit rempli comme il se doit: D Merci pour votre temps :) – savagius

Questions connexes