2012-03-11 60 views
5

我試圖解析與GSON以下JSON響應:Deserialising與GSON JSON響應,使用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 
    } 
    .... 
} 

這些是我已經定義(每個類包含相應getter和setter)的兩個類:

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; 

我一直無法將RepChanges類解析爲Reputation類中的rep_changes屬性。有什麼想法嗎?

注:我設法解析總頁數和頁面大小(這些是非複雜的屬性)。這是我做了什麼:

爲了解析總,頁面和頁面大小,我使用(運行良好):

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

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

但是,這樣做的時候:

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

我(技術上)沒有得到一個錯誤,但下面(這似乎是一個內存位置):

[email protected] 
+0

當您試圖反序列化它時,會出現什麼問題? – ColinD 2012-03-11 17:33:45

+0

@colinD,我編輯了這個問題,我進一步解釋了一下......希望能給出更好的見解;) – savagius 2012-03-11 17:42:44

回答

3

在你Repchanges類,請配置您自己的toString()類似於此的方法:

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

而不是foreach循環,只需調用這個方法,我猜對吧?但是我怎樣才能確定JSON響應中的元素實際上存儲在我想要存儲的屬性中? 謝謝:) – savagius 2012-03-11 17:47:20

+0

@savagius:從您的描述中,JSON得到正確的反序列化。但是,對象的默認'toString()'實現將返回一個以您所描述的格式的字符串:對象的類和內存位置。更改'toString()'實現允許您查看每個'RepChanges'對象中包含的實際數據。 – ColinD 2012-03-11 17:50:44

+0

嗨,夥計們,我很抱歉沒有立即回覆,我試圖通過@deporter測試回覆......理論上你的回答應該是有效的(但是,我想我錯過了一些小的細節,因爲沒有一個是正在打印)。儘管如此,我調試了我的方法,似乎RepChange對象(類)正在填充,因爲它應該是:D 謝謝你的時間:) – savagius 2012-03-11 18:05:39