org.json.simple.JSONArray 不能 cast to org.json.simple.JSONObject

2022-09-02 23:38:15

我正在尝试解析以下文件:json

{"units":[{"id":42,               
   "title":"Hello World",          
    "position":1,
    "v_id":9,
    "sites":[[{"id":316,
      "article":42,
      "clip":133904
        }],
       {"length":5}]

   }, ..]}

这是我尝试过的:

Object obj = null;
JSONParser parser = new JSONParser();
Object unitsObj = parser.parse(new FileReader("file.json");
JSONObject unitsJson = (JSONObject) unitsObj;

JSONArray units = (JSONArray) unitsJson.get("units");
Iterator<String> unitsIterator = units.iterator();
while(unitsIterator.hasNext()){         
    Object uJson = unitsIterator.next();
    JSONObject uj = (JSONObject) uJson;
    obj =  parser.parse(uj.get("sites").toString());
    JSONArray jsonSites = (JSONArray)  obj;

    for(int i=0;i<jsonSites.size();i++){
     JSONObject site = (JSONObject)jsonSites.get(i); // Exception happens here.
     System.out.println(site.get("article");
    }
}

当我尝试解析内部时,代码不起作用,所以我得到:json array

Exception in thread "main" java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject

异常指向以下行:

JSONObject site = (JSONObject)jsonSites.get(i);

有什么帮助吗?腾讯网.


答案 1

我找到了一个工作代码:

JSONParser parser = new JSONParser();
Object obj  = parser.parse(content);
JSONArray array = new JSONArray();
array.add(obj);

如果你不需要数组(像作者一样),你可以简单地使用

JSONParser parser = new JSONParser();
Object obj  = parser.parse(content);

答案 2

数组的第一个元素是数组,如您所见,缩进 JSON:sites

{"units":[{"id":42,               
    ...
    "sites":
    [
      [
        {
          "id":316,
          "article":42,
          "clip":133904
        }
      ],
      {"length":5}
    ]
    ...
}

因此,您需要相应地处理其价值;也许你可以做这样的事情:

JSONObject site = (JSONObject)(((JSONArray)jsonSites.get(i)).get(0));