2011-11-22 21 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" 
            } 
           ] 
          } 
         } 
        } 
       ] 
      } 
     ] 
    } 
} 

Yukarıdaki JSON posta kodunu almaya çalışıyorum. Onu ayrıştırmak için gson kullanıyorum. Ben JSON için çok yeni ve burada tüm bu yazılardan okuduklarımdan (bazıları buna çok benzer), alanların olduğu gibi olması gerektiğini anladım. Yani anlıyorum, 4 sınıf vize Yanıt, görüş, Sonuç ve Adres yapmak zorundayım. Statik iç içe geçmiş sınıflar yaptım, ama sadece çıktı olarak boş değer elde ediyorum. Bir sonraki JSON'da birden çok adresim var. Ama bu tek cevapta sıkışıp kaldım. , Bunun yerine sınıfların bir demet sahip JsonParser kullanabilirsiniz kısa Örneğin Yuvalanmış bir JSON kullanarak gson'u

, ben bu kod ile Zaman Damgası almaya çalışıyorum, ama sadece "PostalCode" gerekiyorsa bana bir boş değer

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

Bunun ile uğraşıyorum, eğer birisi bana yardım ederse takdir edeceğim. – RFT

cevap

42

verir :

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

Teşekkürler çalıştı. Ayrıca merak ettim, bu da birden çok Adres için çalışmalı, değil mi? – RFT

+0

@sid: Harika. Birden çok sonuç mu demek istiyorsun? 'GetAsJsonArray ("Sonuç") üzerinde yineleyebilirsiniz. – jeha

+0

evet, adresleri içeren dizilerim var ve tüm adreslerden posta koduna ihtiyacım var. GetAsJsonArray ("Sonuç") üzerinde yinelemekle neyi kastettiğinizi tam olarak anlamadım. – RFT

10
:
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(); 

veya tüm sonuçlar için Zaman Damgası örneğinizin çalışmasını sağlamak için, aşağıdakileri deneyin:

+0

Benzer bir şeyi daha önce denedim, hala boş görünüyor! – RFT

+1

Sid: Pojo yapmadın ... pojo değil-- - lütfen bunu dene - benim için çalışıyor ve senin için de olmalı – jeha

+1

Bu, sorudan diğerine göre en uygun cevap. –

İlgili konular