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