返回JSONArray中键值对的字符串表示形式

时间:2015-09-23 17:44:18

标签: java json

    for (int i = 0; i < jsonArray.length(); i++){
                System.out.println(jsonArray.getJSONObject(i));
                System.out.println(jsonArray.getJSONObject(i).names());
            }

将打印对,然后是单个对象,例如

{"key1":"a"}
["key1"]
{"key2":"b"}
["key2"]
{"key3":"c"}
["key3"]
{"key4":"d"}
["key4"]
...
{"keyn":"end"}
["keyn"]

我希望for循环能够分别获取每个对象的键和值的字符串解释。

我一直在搜索JSONObject API,但我似乎找不到那样做的方法。如果您知道密钥的名称,则可以轻松获取值的名称:

jsonObject.getString(whenYouKnowTheKeyName));

但是当我在数组中循环时,我假设我都不知道。我想要

key1
a
key2
b
key3
c
key4
d
...

作为输出。我试图从已经创建的JSON对象中读取,而不是创建一个新对象。

1 个答案:

答案 0 :(得分:1)

假设jsonArray中的对象始终只包含一个键,则以下内容应按照您的意愿打印每个对象中的键和值:

for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    Iterator<String> keys = jsonObject.keys();
    String key = keys.next();
    Object value = jsonObject.get(key);
    System.out.println(key);
    System.out.println(value);
}

但是,您可能希望通过在while (keys.hasNext())迭代器循环中包装每个键和值来处理所有对象的所有键:

for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    Iterator<String> keys = jsonObject.keys();
    while (keys.hasNext()) {
        String key = keys.next();
        Object value = jsonObject.get(key);
        System.out.println(key);
        System.out.println(value);
    }
}

以您的示例为例,两种解决方案都具有相同的输出,但显然后者更灵活。