我正在使用org.json.simple.JSONArray
和org.json.simple.JSONObject
。我知道这两个类JSONArray
和JSONObject
是不兼容的,但我仍然想要做一件很自然的事情 - 我想在每个迭代步骤{for} JSONArray
解析每个JSONObject
{1}}(嵌套在JSONArray
内)。我试着这样做:
JSONArray arr = ...; // <-- got by some procedure
for(JSONObject o: arr){
parse(o);
}
当我尝试编译此代码时,确实我得到了&#34;不兼容的类型&#34;错误,即使它看起来很自然。那么,我的问题是迭代JSONArray
的最佳方式是什么?
答案 0 :(得分:37)
似乎您无法使用JSONArray
遍历for each
。您可以像这样循环遍历JSONArray
:
for (int i=0; i < arr.length(); i++) {
arr.getJSONObject(i);
}
答案 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)
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");
}