2014-10-17 39 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 

代码没有编译,所以可能有错误,询问你是否有其他问题。