【问题标题】:Android JSONObject - How can I loop through a flat JSON object to get each key and valueAndroid JSONObject - 我如何遍历一个平面 JSON 对象来获取每个键和值
【发布时间】:2012-11-14 11:09:24
【问题描述】:
{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

如何在事先不知道 key 和 value 的情况下获取每个 item 的 key 和 value?

【问题讨论】:

标签: java android json


【解决方案1】:

使用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!
    }
}

【讨论】:

  • 注意:您不能使用 (String s: json.keys()) { ... } 的缩写形式 JSONArray 和 JSONObject 都不是可迭代的,这真是太可惜了。 :-(
  • 这里的json是什么? Json 对象、Json 数组还是其他?
  • @PravinsinghWaghela 它是问题中指定的 JSONObject
【解决方案2】:

看看 JSONObject 参考:

http://www.json.org/javadoc/org/json/JSONObject.html

在不实际使用对象的情况下,看起来使用返回 Iterator 的 getNames() 或 keys() 是可行的方法。

【讨论】:

【解决方案3】:

您应该使用keys() 或names() 方法。 keys() 会给你一个包含对象中所有字符串属性名称的迭代器,而names() 会给你一个包含所有关键字符串名称的数组。

您可以在此处获取 JSONObject 文档

http://developer.android.com/reference/org/json/JSONObject.html

【讨论】:

    【解决方案4】:

    弗朗西回答的简短版本:

    for(Iterator<String> iter = json.keys();iter.hasNext();) {
        String key = iter.next();
        ...
    }
    

    【讨论】:

    • 这里的json是什么? Json 对象、Json 数组还是其他?
    • json 是 JsonObject
    • @PravinsinghWaghela 很确定 OP 询问了如何遍历 json 对象。
    【解决方案5】:

    您需要使用Iterator 循环访问键以获取它们的值。

    这是一个 Kotlin 实现,你会意识到我获取字符串的方式是使用 optString(),它需要一个字符串或一个可为空的值。

    val keys = jsonObject.keys()
    while (keys.hasNext()) {
        val key = keys.next()
        val value = targetJson.optString(key)        
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 2019-04-08
      • 1970-01-01
      相关资源
      最近更新 更多