我有两个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
我在两个项目中都有相同的导入,而且我使用的是Java 8.我真的很困惑为什么会这样。
我打赌你使用的库是不同的:
对于图书馆
<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
}
}
如果org.json.JSONArray是您要引用的JSONArray。
https://developer.android.com/reference/org/json/JSONArray
JSONArray扩展了Object。对于每个循环,如异常所示,仅支持Iterable或数组。 Iterable是一个界面。 JSONArray没有实现它。 JSONArray显然不是一个数组。因此,两种情况都不会失败,因此错误显示。
如果你需要遍历它的元素,你可以
for (int i = 0; i < logList.length(); i++) {
Object log = logList.get(i);
}
其他海报是正确的JSONArray不可迭代,但回答你的具体问题...
IDE可以根据每个项目改变错误消息的级别
尝试将代码的无错误部分复制到另一个类(进行任何更改以使其编译)以查看IDE是否开始标记该代码。