2014-10-17 58 views
1

我有一個關於從jsonobject獲取jsonobjects的問題。如何解析其中的JSONObjects JSONObject?

這是林找回:

{ 
"data": { 
    "someid": { 
     "air_by_date": 0, 
     "cache": { 
      "banner": 1, 
      "poster": 1 
     }, 
     "language": "en", 
     "network": "somenetwork", 
     "next_ep_airdate": "somedate", 
     "paused": 0, 
     "quality": "somequality", 
     "show_name": "somename", 
     "status": "Continuing", 
     "tvdbid": someid, 
     "tvrage_id": someid, 
     "tvrage_name": "Showname" 
    }, 
    "someid": { 
     "air_by_date": 0, 
     "cache": { 
      "banner": 1, 
      "poster": 1 
     }, 
     "language": "en", 
     "network": "somenetwork", 
     "next_ep_airdate": "", 
     "paused": 0, 
     "quality": "somequality", 
     "show_name": "somename", 
     "status": "Continuing", 
     "tvdbid": someid, 
     "tvrage_id": someid, 
     "tvrage_name": "somename" 
    }, 

但我怎麼創建它們的「ShowObjects」。我知道它如何與JSONArrays一起工作,但我從來沒有做過這種JSON。

這就是我現在得到了,直到:

String json = download(url); 

JSONObject result = new JSONObject(json); 
JSONObject resultData = result.getJSONObject("data"); 
+0

你想循環'data'中的那些數字條目,並將其中的每個變成一個'JSONObject'?如果是,那麼[this](http://stackoverflow.com/a/13573965/802469)將有所幫助。 – Jakar 2014-10-17 18:56:21

+0

你有什麼應該工作得很好。發生了什麼/不起作用? – Henry 2014-10-17 18:57:27

+0

@jakar這些數字對象代表一個節目,但我如何循環播放它?因爲它不是我返回的JSONArray,所以我有點困惑於如何去做。 – Timmeeh93 2014-10-17 19:00:21

回答

0

this answer複製:

使用鍵()迭代器遍歷所有屬性,並調用get()每個。

Iterator<String> iter = json.keys(); 
while (iter.hasNext()) { 
    String key = iter.next(); 
    try { 
     Object value = json.get(key); 
    } catch (JSONException e) { 
     // Something went wrong! 
    } 
} 
+0

我還沒有得到它如何創建我自己的演出對象。 – Timmeeh93 2014-10-17 19:38:31

+0

如果速度是一個優先事項,那麼我會建議您手動設置Show'對象的值。例如:'show.setLanguage(showJson.getString('language'))';或者,您可以使用反射來基於JSON鍵=屬性名稱的JSON中的鍵設置屬性值。不過,這會對性能產生負面影響。如果你願意,我可以用一個反射的基本例子來更新 – Jakar 2014-10-17 21:23:23

+0

或者你可以使用已經處理過這種事情的第三方json庫。請參閱Drejc的答案 – Jakar 2014-10-17 21:25:14

0

嘗試使用JacksonGson執行這些任務。

隨着Jackson,你會做這樣的事情:

class Response() { 
    public String message; 
    public String result; 
    public Map<String, Object> data; 
} 

ObjectMapper mapper = new ObjectMapper() 
Resonse respone = mapper.readValue(json, Response.class) 

或使用自定義解串器來讀取這些值了。

0

我會給你一個例子,如何獲取你的「數據」 JSON對象和增值經銷商:

可以說,第二個「someid」爲:「123」。現在,我們將獲取第二的JSONObject:

JSONObject secondJsonSomeId = resultData.getJsonObject("123"); 

現在,我們將得到一個 「旗幟」(INT = 1)的JSONObject名爲 「緩存」 位於我們secondJsonSomeId的:

int bannerInsecondJsonSomeId = secondJsonSomeId.getJsonObject("cache").getInt("banner");// bannerInsecondJsonSomeId == 1 

代碼沒有編譯,所以可能有錯誤,詢問你是否有其他問題。