Android JSONObject - 我如何遍历一个平面 JSON 对象来获取每个键和值

Posted

技术标签:

【中文标题】Android JSONObject - 我如何遍历一个平面 JSON 对象来获取每个键和值【英文标题】:Android JSONObject - How can I loop through a flat JSON object to get each key and value 【发布时间】:2012-11-14 11:09:24 【问题描述】:

  "key1": "value1",
  "key2": "value2",
  "key3": "value3"

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

【问题讨论】:

***.com/questions/9151619/… 【参考方案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() 是可行的方法。

【讨论】:

链接错误。 android 中的JSONObject 没有getNames()。 developer.android.com/reference/org/json/JSONObject.html【参考方案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)        

【讨论】:

以上是关于Android JSONObject - 我如何遍历一个平面 JSON 对象来获取每个键和值的主要内容,如果未能解决你的问题,请参考以下文章

如何压缩 JSONObject 在 Android 中通过 Http 发送它?

如何将 JsonObject 转换为类模型 kotlin android

Android JSONObject - 我如何遍历一个平面 JSON 对象来获取每个键和值

从android中的JsonObject中提取坐标

ANDROID - 如何从 sqlite 字段中分离 JSONObject 值

从android解析jsonObject并在webservice vb.net中获取它