2012-03-11 21 views
5

मैं GSON साथ निम्नलिखित JSON प्रतिक्रिया को पार्स करने का प्रयास कर रहा हूँ का उपयोग कर:GSON साथ एक JSON प्रतिक्रिया Deserialising, जावा

{ 
    "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 
    } 
    .... 
} 

इन दो वर्गों मैं परिभाषित किया है (प्रत्येक वर्ग के संबंधित getters और setters होता है) कर रहे हैं:

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; 

मैं में rep_changes प्रतिष्ठा कक्षा में विशेषता RepChanges वर्ग पार्स करने में अक्षम किया गया है। कोई विचार?

नोट: मैंने कुल, पृष्ठ और पृष्ठों को पार्स करने में कामयाब रहा है (ये गैर-जटिल विशेषताएं हैं)। ,

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

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

लेकिन जब कर रही:

कुल, पेज को पार्स करने के लिए, और pagesize, मैं प्रयोग किया जाता है (और ठीक काम किया): यह मैं क्या किया है है

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

मैं (तकनीकी रूप से) एक त्रुटि नहीं मिलता है, लेकिन निम्नलिखित (जो एक स्मृति स्थान की तरह लगता है):

[email protected] 
+0

जब आप इसे deserialize करने की कोशिश क्या समस्या है? – ColinD

+0

@colinD, मैंने समस्या संपादित की, मैंने थोड़ा और समझाया ... आशा है कि बेहतर अंतर्दृष्टि प्रदान करे;) – savagius

उत्तर

3

अपनेमें 0 वर्ग, अपने खुद के 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

और फ़ोरैच लूप के बजाय, बस इस विधि को कॉल करें, मुझे सही लगता है? लेकिन मैं कैसे सुनिश्चित कर सकता हूं कि JSON प्रतिक्रिया के तत्व वास्तव में उस विशेषता के भीतर संग्रहीत किए गए हैं, जिसे मैं संग्रहीत करना चाहता हूं? धन्यवाद :) – savagius

+0

@Savagius: आपके विवरण से, JSON ठीक से deserialized हो रही है। हालांकि, किसी ऑब्जेक्ट के लिए डिफ़ॉल्ट 'toString() 'कार्यान्वयन आपके द्वारा वर्णित प्रारूप में एक स्ट्रिंग देता है: ऑब्जेक्ट की क्लास और मेमोरी लोकेशन। 'ToString()' कार्यान्वयन को बदलने से आप प्रत्येक 'RepChanges' ऑब्जेक्ट में निहित वास्तविक डेटा देख सकते हैं। – ColinD

+0

नमस्ते, दोस्तों, तुरंत जवाब देने के लिए मेरी माफ़ी, मैंने @ डिपोर्टर द्वारा जवाब का परीक्षण करने का प्रयास किया ... सिद्धांत रूप में आपकी प्रतिक्रिया वैध होनी चाहिए (हालांकि, मुझे लगता है कि मुझे कुछ मामूली जानकारी याद आ रही है जिसके कारण कोई भी नहीं है मुद्रित किया जा रहा है)। इसके बावजूद, मैंने अपनी विधि को डीबग किया और ऐसा लगता है कि रिप चेंज ऑब्जेक्ट (क्लास) भरना जा रहा है क्योंकि यह होना चाहिए: डी आपके समय के लिए धन्यवाद :) – savagius

संबंधित मुद्दे