我有两个Java应用程序。在他们两个我都使用foreach迭代json数组:
JSONArray logList = jobj.getJSONArray("creation_time");
for (Object log : logList) {
}
在一个项目中没有错误,但是在另一个项目中,logList
下有一条红线,错误为Can only iterate over an array or an instance of java.lang.Iterable
我在两个项目中都有相同的导入,并且我正在使用Java8。我真的很困惑为什么会这样。
答案 0 :(得分:2)
如果org.json.JSONArray是您所引用的JSONArray。
https://developer.android.com/reference/org/json/JSONArray
JSONArray扩展对象。异常建议,对于每个循环,仅支持Iterable或数组。接口是可迭代的。 JSONArray不会实现这一点。 JSONArray显然不是数组。所以这两种情况都不会失败,因此会显示错误。
如果需要遍历其元素,可以
for (int i = 0; i < logList.length(); i++) {
Object log = logList.get(i);
}
答案 1 :(得分:2)
我敢打赌,您使用的库是不同的:
对于图书馆
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
JSONArray没有实现迭代器,因此您需要如下所示的for循环:
for (int i = 0; i < logList.length(); i++) {
//your operation
}
如果您正在使用下面的库
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
</dependency>
然后使用以下方法:
for (Object jsonObject : logList) {
if(jsonObject instanceof JSONObject)
{
//your operation
}
}
答案 2 :(得分:0)
关于JSONArray不是可迭代的,其他回答是正确的,但可以回答您的特定问题...
根据
的不同,IDE可以根据每个项目改变错误消息的级别。尝试将代码的“无错误”部分复制到另一个类中(进行任何更改以使其编译),以查看IDE是否开始标记该代码。