org.json.simple.JSONArray无法强制转换为org.json.simple.JSONObject

tok*_*khi 12 java json

我正在尝试解析json文件:

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

   }, ..]}
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Exception in thread "main" java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject
Run Code Online (Sandbox Code Playgroud)

例外是指向这一行:

JSONObject site = (JSONObject)jsonSites.get(i);
Run Code Online (Sandbox Code Playgroud)

有帮助吗?TNX.

Dan*_*non 19

我找到了一个有效的代码:

JSONParser parser = new JSONParser();
Object obj  = parser.parse(content);
JSONArray array = new JSONArray();
array.add(obj);
Run Code Online (Sandbox Code Playgroud)

  • 尽管这与所问的问题完全相反,但它解决了我的问题,即将 JSONObject 转换为 JSONArray ......所以我这边+1 (2认同)

cyb*_*erz 6

sites数组的第一个元素是一个数组,你可以看到缩进JSON:

{"units":[{"id":42,               
    ...
    "sites":
    [
      [
        {
          "id":316,
          "article":42,
          "clip":133904
        }
      ],
      {"length":5}
    ]
    ...
}
Run Code Online (Sandbox Code Playgroud)

因此,您需要相应地对待它的价值; 可能你可以这样做:

JSONObject site = (JSONObject)(((JSONArray)jsonSites.get(i)).get(0));
Run Code Online (Sandbox Code Playgroud)