json数组上的foreach

时间:2018-08-03 05:17:20

标签: java arrays json foreach java-8

我有两个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。我真的很困惑为什么会这样。

3 个答案:

答案 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可以根据每个项目改变错误消息的级别。
  1. JDK的级别
  2. JDK的兼容性级别
  3. 该类或方法的任何Java注释
  4. IDE本身的Java设置(例如,使用Eclipse,您可以指定每个编译器“问题”是错误,警告还是要忽略的东西
  5. 可能还有其他因素

尝试将代码的“无错误”部分复制到另一个类中(进行任何更改以使其编译),以查看IDE是否开始标记该代码。