JSONArray和JSONObject的应用示例

lb3vh1jj  于 2023-02-26  发布在  其他
关注(0)|答案(4)|浏览(128)

我使用的是org.json.simple.JSONArrayorg.json.simple.JSONObject,我知道这两个类JSONArrayJSONObject是不兼容的,但我仍然想做一件很自然的事情--我想在每个迭代步骤中,通过JSONArray解析一个JSONObject(嵌套在JSONArray中),我尝试这样做:

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

当我试图编译这段代码时,我确实得到了“不兼容类型”的错误,尽管它看起来很自然。所以,我的问题是什么是迭代JSONArray的最佳方法?

5w9g7ksd

5w9g7ksd1#

看起来你不能用一个for each来迭代JSONArray,你可以这样循环你的JSONArray

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

Source

u59ebvdq

u59ebvdq2#

显然,org.json.simple.JSONArray实现了一个 raw Iterator,这意味着每个元素都被认为是一个Object,您可以尝试强制转换:

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

这就是Java 1.4及更早版本的工作方式。

zlwx9yxi

zlwx9yxi3#

请确保您正在使用此org.json:https://mvnrepository.com/artifact/org.json/json
如果您使用的是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"}
yhqotfr8

yhqotfr84#

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

例如:

JSONArray myJSONArray = [...Some JSONObjects Here...];

    for (Object myObject : myJSONArray) {

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

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

相关问题