代码之家  ›  专栏  ›  技术社区  ›  el323

json数组上的foreach

  •  1
  • el323  · 技术社区  · 7 年前

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

    3 回复  |  直到 7 年前
        1
  •  2
  •   Shubhendu Pramanik    7 年前

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

    图书馆

    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20090211</version>
    </dependency>
    

    JSONArray不实现迭代器,因此需要如下循环:

    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
  •  2
  •   Mr. Brickowski    7 年前

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

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

    JSONArray扩展对象。对于每个循环,如异常所示,只支持Iterable或array。Iterable是一个接口。JSONArray没有实现这一点。显然,JSONArray不是数组。所以这两个案例都没有失败,所以错误就显现出来了。

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

    for (int i = 0; i < logList.length(); i++) {
        Object log = logList.get(i);
    }
    
        3
  •  0
  •   Chris Gerken    7 年前

    其他的海报是正确的,关于JSONArray是不可接受的,但回答你的具体问题。。。

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

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

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