在Java / Android中迭代JsonObject。不是JsonArray

时间:2014-02-20 20:42:40

标签: android json jsonobject

这是我的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字符串本身并将'{'的某些部分替换为'['并将其转换为数组:( ...我认为这是一种悲伤的方法。

1 个答案:

答案 0 :(得分:1)

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