【问题标题】:foreach on json arrayjson数组上的foreach
【发布时间】:2018-08-03 05:17:20
【问题描述】:

我有两个 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。我真的很困惑为什么会发生这种情况。

【问题讨论】:

  • 请显示您对这两个类的导入。
  • 假设您使用的是this 类,因为它没有实现java.lang.Iterable
  • 每个循环需要一个Object实现Iterable我建议你使用一个标准。
  • @Logan 我在两个项目中都使用import org.json.JSONArray
  • @EL323 是的,JavaDoc 适用于org.json.JSONArray

标签: java arrays json foreach java-8


【解决方案1】:

我敢打赌你使用的库是不同的:

对于图书馆

<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
            }
        }

【讨论】:

  • 原来我在一个项目中从外部添加了一个 json jar(我遇到了错误)。我删除了 jar,现在我可以使用 foreach 进行迭代。感谢您的帮助。
【解决方案2】:

如果 org.json.JSONArray 是您引用的 JSONArray。

https://developer.android.com/reference/org/json/JSONArray

JSONArray 扩展对象。对于每个循环,正如异常所暗示的那样,仅支持 Iterable 或数组。 Iterable 是一个接口。 JSONArray 没有实现。 JSONArray 显然不是数组。所以两种情况都没有失败,因此错误显示。

如果你需要遍历它的元素,你可以

for (int i = 0; i < logList.length(); i++) {
    Object log = logList.get(i);
}

【讨论】:

  • 令我困惑的是,在一个项目中,JSONArray 上的 foreach 正在工作
  • 真的吗?我想看看。我想,也许他们都命名为 JSONArray 但实际上来自不同的包?
  • 或不同版本的 JSONArray。
【解决方案3】:

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

IDE 可以根据每个项目改变错误消息的级别,具体取决于

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

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

【讨论】:

    猜你喜欢
    • 2019-12-08
    • 1970-01-01
    • 2023-03-11
    • 2018-09-11
    • 1970-01-01
    • 2021-08-21
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多