【问题标题】:How can I parse this type of JSON? (Can only iterate over an array or an instance of java.lang.Iterable) [duplicate]如何解析这种类型的 JSON? (只能遍历数组或 java.lang.Iterable 的实例)[重复]
【发布时间】:2016-09-10 03:51:42
【问题描述】:

我正在尝试解析一些 JSON(摘录如下),但收到以下错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Can only iterate over an array or an instance of java.lang.Iterable

还有一个非常大的 json 文件的摘录:

[
  {
    "normal" : "Le tour change de sens ! Ce n'est pas une action, c'est le joker!"
  },
  {
    "normal" : "Prends la main de ton voisin de gauche"
  },
  {
    "normal" : "Fais une déclaration d'amour à la personne en face de toi!"
  },
  {
    "normal" : "Reste sur les genoux de la personne à ta droite pendant un tour"
  },

自己想办法。代码如下:

import org.json.simple.JSONArray;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.json.JSONException;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;


public class ParseJson{


    static String printAcounts = "";
    public static void main(String[] args) throws FileNotFoundException, IOException, ParseException, JSONException{
        JSONParser parser = new JSONParser();
        JSONArray objArray = (JSONArray) parser.parse(new FileReader("C:\\Users\\Bogdanel\\Desktop\\Ressources\\normal_actions.json"));

        for (Object o : objArray){
        JSONObject obj = (JSONObject) o;
        String s = (String) obj.get("normal");
        System.out.println(s);
        }


    }
}

ascasccascasc

【问题讨论】:

  • 您使用的是哪个 JSON 库?
  • 您拥有的JSONArray 类没有实现Iterable,因此您不能使用Java 的扩展for-loop 语法。解决方案是使用JSONArray 上的方法。例如,如果它有一个长度或大小或计数和一个 get 方法。这将取决于您使用的是哪个 json 库。

标签: java json


【解决方案1】:

不要混淆org.json.JSONArrayjavax.json.JsonArray。前者没有实现Iterable,而后者实现了。

Android 对JSONArray 的使用就像一个典型的JSON 值,只是它可以get(index) 像一个集合。 JsonArray 基本上是 List<JsonValue>

简而言之,使用典型的for结构并改用get

【讨论】:

    【解决方案2】:

    JSONArray 不像常规数组,因此您不能使用 foreach 循环(Java 中的高级 for)遍历它。可以参考这个answer,不过基本上是用一个常规的for循环,获取这样的项目

    objArray.getJSONObject(i).getString("someKey");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      相关资源
      最近更新 更多