在json数组上的foreach

问题描述 投票:1回答:3

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

java arrays json foreach java-8
3个回答
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
投票

如果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);
}

0
投票

其他海报是正确的JSONArray不可迭代,但回答你的具体问题...

IDE可以根据每个项目改变错误消息的级别

  1. JDK的级别
  2. JDK的兼容级别
  3. 类或方法的任何Java注释
  4. IDE本身的Java设置(例如,使用Eclipse,您可以指定每个编译器的“问题”是错误,警告还是要忽略的内容
  5. 可能还有其他因素

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

© www.soinside.com 2019 - 2024. All rights reserved.