【问题标题】:How to parse JSONObject with other JSONObjects inside it?如何使用其中的其他 JSONObject 解析 JSONObject?
【发布时间】:2014-12-13 10:11:11
【问题描述】:

我有一个关于从 jsonobject 中获取 jsonobjects 的问题。

这是我回来的:

{
"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");

【问题讨论】:

  • 您是否要遍历data 中的这些数字条目并将每个条目转换为JSONObject?如果是,那么this 会有所帮助。
  • 您所拥有的应该可以正常工作。发生了什么/不起作用?
  • @jakar 这些数字对象代表一个节目,但我如何循环播放呢?因为它不是我返回的 JSONArray,所以我对如何做有点困惑。
  • @Timmeeh93:那不是你从那里得到的 JSON 字符串。
  • 您是要创建自己的对象数组还是获取特定对象(someid)

标签: java android json


【解决方案1】:

复制自this answer:

使用 keys() 迭代器遍历所有属性,并为每个属性调用 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!
    }
}

【讨论】:

  • 我仍然不明白如何从中创建我自己的节目对象。
  • 如果速度是一个优先事项,那么我建议您手动设置 Show 对象的值。例如:show.setLanguage(showJson.getString('language'));或者,您可以使用反射根据 JSON 中的键设置属性值,其中 JSON 键 = 属性名称。但是,这将对性能产生负面影响。如果你愿意,我可以更新一个基本的反射示例
  • 或者您可以使用已经处理此类事情的第三方 json 库。查看 Drejc 的答案
【解决方案2】:

尝试使用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)

或使用自定义反序列化器读取这些值。

【讨论】:

    【解决方案3】:

    我会给你一个例子,如何在你的“数据”json中获取对象和变量:

    让我们说第二个“someid”是:“123”。我们现在将获取第二个 jsonObject:

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

    现在我们将获取位于 secondJsonSomeId 中名为“cache”的 jsonObject 的“banner”(int =1):

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

    代码未编译,因此可能存在错误,如果您有其他问题,请询问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多