【问题标题】:Iterating through JsonObject in Java/Android. NOT JsonArray在 Java/Android 中遍历 JsonObject。不是 JsonArray
【发布时间】:2014-02-20 20:42:39
【问题描述】:

这是我的 JSON 数据示例:

        {
   "node_1.1":{
      "someCrap":{
         "someCrap":"SomeValue"
      }
   },
   "node_1.2":{
      "Node_1.2.1":{
         "Node_1.2.1.1":{
            "param1":value,
            "param2":value,
            "param3":"value",
            "paramThatIneed":{
               "ThisIsWhatIActuallyNeed":"url",
               "width":96,
               "height":72
            }
         },
         "Node_1.2.1.2":{
            Same as above, just that paramThatINeed might be missing, gotta place imagePlaceHolder Here
         },
         //and so on... there are a total of 50 of these..

      }
   }
}

现在我可以得到 node_1.1 和 Node 1.2 以及它的子节点 node_1.2.1 但是,node_1.2.1 内部有 50 个子节点,它们的名称会随机从服务器返回。它是字符串格式,但它们实际上是整数。它是一个页面 ID。 现在我想遍历 node_1.2.1 并获取这些子节点并访问它们的子节点并获取paramThatINeed 的 URL。如果paramThatINeed 不存在,我需要输入一些空值/虚拟值。

这是我尝试使用的代码:

JSONObject jsonObj = new JSONObject(jsonStr); //jsonStr is the entire JSON string
JsonObject node_1.2= jsonObj.getJsonObject("node_1.1");
JsonObject node_1.2.1 = node_1.2.getJsonObject("node_1.2.1");

之后我该怎么办?因为我只能通过将字符串 param 传递给它来获取 JsonObject,所以我尝试使用 for 循环,但它不需要任何 int param

另外,正如我之前所说,之后的节点具有随机名称并且不固定。所以我完全糊涂了。

如果您知道如何解决此问题,请帮助我。请记住这里没有JsonArray。我可能正在考虑编辑 JSON 字符串本身并将 '{' 的某些部分替换为 '[' 并将其转换为数组 :( ...我认为这是一种可悲的方法。

【问题讨论】:

  • JSON 是一个基于键/值对的系统,其中键是固定值,而不是数据本身。这真的是您唯一可用的数据格式吗?

标签: android json jsonobject


【解决方案1】:

使用它来迭代一个对象。 Android (JSONObject) How can I loop through a flat JSON object to get each key and each value 但要小心,从 json 对象你不会得到原始顺序的结果,就像在 json 数组中一样。结果将按字母顺序排列(我希望我很清楚)。您可以使用 optJsonobject(),而不是 getJsonObject()。它将返回 null,而不是抛出异常。您可以在每个地方都使用 opt 而不是 get。

【讨论】:

  • 您好,非常感谢您的帮助,我将尝试实施并发布结果。
  • 我没有足够的代表来感谢和投票给你的答案。这是一个绝妙的提示,非常感谢您,先生,您解决了这个问题。 optJsonObject() 是个绝妙的主意! :D
  • 也感谢@Ty221 编辑问题。感谢您为使 stackoverflow 成为一个优秀的社区和资源所做的努力。我会记住您所做的更改,并尝试将它们包含在我未来的问题中。谢谢:)
猜你喜欢
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多