2011-11-22 7 views
32
{ 
    "Response": { 
     "MetaInfo": { 
      "Timestamp": "2011-11-21T14:55:06.556Z" 
     }, 
     "View": [ 
      { 
       "_type": "SearchResultsViewType", 
       "ViewId": 0, 
       "Result": [ 
        { 
         "Relevance": 0.56, 
         "MatchQuality": { 
          "Country": 1, 
          "State": 1, 
          "County": 1, 
          "City": 1, 
          "PostalCode": 1 
         }, 
         "Location": { 
          "LocationType": "point", 
          "DisplayPosition": { 
           "Latitude": 50.1105, 
           "Longitude": 8.684 
          }, 
          "MapView": { 
           "_type": "GeoBoundingBoxType", 
           "TopLeft": { 
            "Latitude": 50.1194932, 
            "Longitude": 8.6699768 
           }, 
           "BottomRight": { 
            "Latitude": 50.1015068, 
            "Longitude": 8.6980232 
           } 
          }, 
          "Address": { 
           "Country": "DEU", 
           "State": "Hessen", 
           "County": "Frankfurt am Main", 
           "City": "Frankfurt am Main", 
           "District": "Frankfurt am Main", 
           "PostalCode": "60311", 
           "AdditionalData": [ 
            { 
             "value": "Germany", 
             "key": "CountryName" 
            } 
           ] 
          } 
         } 
        } 
       ] 
      } 
     ] 
    } 
} 

का उपयोग करके एक नेस्टेड JSON पार्स को उपरोक्त JSON से डाक कोड पुनर्प्राप्त करने का प्रयास कर रहा हूं। मैं इसे पार्स करने के लिए जीसन का उपयोग कर रहा हूं। मैं जेएसओएन के लिए बहुत नया हूं और यहां से मैंने यहां तक ​​कि सभी पदों से कुछ पढ़ा है (कुछ इस तरह के समान हैं), मुझे समझ में आया कि फ़ील्ड का नाम होना चाहिए। इसलिए मैं समझता हूं कि मुझे 4 वर्गों जैसे प्रतिक्रिया, परिणाम, परिणाम और पता बनाना है। मैंने उन्हें स्थिर नेस्टेड कक्षाएं बनाईं, लेकिन मुझे आउटपुट के रूप में केवल शून्य मूल्य मिल रहा है। अगले JSON में, मेरे पास एकाधिक पते हैं। लेकिन मैं इस प्रतिक्रिया पर फंस गया हूं।जीएसन

एक छोटी उदाहरण के लिए, मैं इस कोड के साथ समय-चिह्न प्राप्त करने का प्रयास है, लेकिन यह मेरे लिए एक शून्य मान

public class ParseJSON { 
    public static void main(String[] args) throws Exception { 
     BufferedReader br = new BufferedReader(new FileReader("try.json")); 

     Gson gson = new GsonBuilder().create(); 
     Pojo pojo = gson.fromJson(br,Pojo.class); 
     System.out.println(Pojo.Response.MetaInfo.Timestamp); 
     br.close(); 
    } 
} 

class Pojo { 
    public Pojo() { } 

    static class Response{ 
     static class MetaInfo { 
      static public String Timestamp; 

      public String getTimestamp() { 
        return Timestamp; 
      } 
     } 
    } 
} 
+0

मैं इस के साथ संघर्ष कर रहा हूँ, अगर किसी को मेरी मदद कर सकते मैं इसे सराहना करेंगे। – RFT

उत्तर

42

देता है आप केवल "PostalCode" की जरूरत है, आप के बजाय कक्षाओं का एक समूह होने के JsonParser इस्तेमाल कर सकते हैं :

JsonParser jsonParser = new JsonParser(); 
JsonObject address = jsonParser.parse(json) 
    .getAsJsonObject().get("Response") 
    .getAsJsonObject().getAsJsonArray("View").get(0) 
    .getAsJsonObject().getAsJsonArray("Result").get(0) 
    .getAsJsonObject().get("Location") 
    .getAsJsonObject().getAsJsonObject("Address"); 
String postalCode = address.get("PostalCode").getAsString(); 

या सभी परिणामों के लिए:

JsonArray results = jsonParser.parse(json) 
     .getAsJsonObject().get("Response") 
     .getAsJsonObject().getAsJsonArray("View").get(0) 
     .getAsJsonObject().getAsJsonArray("Result"); 
for (JsonElement result : results) { 
    JsonObject address = result.getAsJsonObject().get("Location").getAsJsonObject().getAsJsonObject("Address"); 
    String postalCode = address.get("PostalCode").getAsString(); 
    System.out.println(postalCode); 
} 
+0

धन्यवाद यह काम किया। इसके अलावा, मैं उत्सुक था, यह कई पते के लिए भी काम करना चाहिए, है ना? – RFT

+0

@ एसआईडी: ग्रेट। आप का मतलब कई परिणाम हैं? आप 'getAsJsonArray ("परिणाम") पर फिर से शुरू कर सकते हैं, यही मतलब है कि आपका मतलब है। – jeha

+0

हां, मेरे पास ऐसे आइटम हैं जो पते वाले एरे हैं और मुझे सभी पते से पोस्टल कोड चाहिए। मुझे एएसजेसनएरे ("परिणाम") पर फिर से शुरू करने का क्या मतलब है। – RFT

10

अपने टाइमस्टैम्प उदाहरण काम करे, इसके लिए प्रयास करें:

public class ParseJSON { 
    public static void main(String[] args) throws Exception { 
     BufferedReader br = new BufferedReader(new FileReader("try.json")); 

     Gson gson = new GsonBuilder().create(); 
     Pojo pojo = gson.fromJson(br, Pojo.class); 

     System.out.println(pojo.Response.MetaInfo.Timestamp); 
     br.close(); 
    } 
} 

class Pojo { 
    Response Response = new Response(); 
} 

class Response { 
    MetaInfo MetaInfo = new MetaInfo(); 
} 

class MetaInfo { 
    String Timestamp; 
} 
+0

मैंने पहले भी इसी तरह की कोशिश की, यह अभी भी शून्य दिखाता है! – RFT

+1

@sid: आपने 'Pojo ...' 'pojo ...' - कृपया इसे आजमाएं - यह मेरे लिए काम करता है और आपके लिए भी – jeha

+1

यह दूसरे के मुकाबले प्रश्न का सबसे उचित उत्तर है। –