Foreach with JSONArray和JSONObject

时间:2015-10-19 13:19:58

标签: java json

我正在使用org.json.simple.JSONArrayorg.json.simple.JSONObject。我知道这两个类JSONArrayJSONObject是不兼容的,但我仍然想要做一件很自然的事情 - 我想在每个迭代步骤{for} JSONArray解析每个JSONObject {1}}(嵌套在JSONArray内)。我试着这样做:

JSONArray arr = ...; // <-- got by some procedure
for(JSONObject o: arr){
    parse(o);
}

当我尝试编译此代码时,确实我得到了&#34;不兼容的类型&#34;错误,即使它看起来很自然。那么,我的问题是迭代JSONArray的最佳方式是什么?

4 个答案:

答案 0 :(得分:37)

似乎您无法使用JSONArray遍历for each。您可以像这样循环遍历JSONArray

for (int i=0; i < arr.length(); i++) {
    arr.getJSONObject(i);
}

Source

答案 1 :(得分:28)

显然,org.json.simple.JSONArray实现了原始迭代器。这意味着每个元素都被认为是Object。你可以尝试施放:

for(Object o: arr){
    if ( o instanceof JSONObject ) {
        parse((JSONObject)o);
    }
}

这就是在Java 1.4及更早版本中完成的工作。

答案 2 :(得分:13)

如果您使用的是Java 8,则可以使用

import org.json.JSONArray;
import org.json.JSONObject;

JSONArray array = ...;

array.forEach(item -> {
    JSONObject obj = (JSONObject) item;
    parse(obj);
});

刚刚添加了一个简单的测试来证明它有效:

将以下依赖项添加到您的pom.xml文件中(为了证明它有效,我已经使用了当我发布此答案时在那里的旧jar)

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160810</version>
</dependency>

简单的测试代码片段将是:

import org.json.JSONArray;
import org.json.JSONObject;

public class Test {
    public static void main(String args[]) {
        JSONArray array = new JSONArray();

        JSONObject object = new JSONObject();
        object.put("key1", "value1");

        array.put(object);

        array.forEach(item -> {
            System.out.println(item.toString());
        });
    }
}

输出:

{"key1":"value1"}

答案 3 :(得分:0)

  • for 循环内,您可以简单地将 Object 类型转换为 JSONObject 并访问值。

例如:

    JSONArray myJSONArray = [...Some JSONObjects Here...];
    JSONObject myJSONObject = new JSONObject();
    for (Object myObject : myJSONArray) {

        //If you want to get JSONObject
        myJSONObject = (JSONObject) myObject;

        //If you want to access JSONObject's values
        long number     = ((JSONObject) myJSONObject).getLong("myNum");
        String myString = ((JSONObject) myJSONObject).getString("myStr");
    }