获取ClassCastException

时间:2016-01-20 09:22:51

标签: java json

我有一个Iterator来从JSON格式生成对象。但不幸的是我得到了一个

  

ClassCastException:org.json.simple.JSONArray无法强制转换为Main.Test.main中的org.json.simple.JSONObject(Test.java:33)

我的测试课程如下:

public class Test {
   public static void main(String[] args) {
      JSONParser parser = new JSONParser();
      ArrayList al = new ArrayList(); 

      try {
         Object jsonData = parser.parse(new FileReader("C:\\Users\\b\\Desktop\\test.json"));
         JSONObject jsonObject = (JSONObject) jsonData;

         JSONIteratorAuthor itr = new JSONIteratorAuthor(jsonObject);
         while(itr.hasNext()){
            al.add(itr.next());
         }

         while(itr.hasNext()){
             Object element = itr.next();
             System.out.print(element + "");
         }        
     } 
     catch (FileNotFoundException e) {
        e.printStackTrace();
     } 
     catch (IOException e) {
        e.printStackTrace();
     } 
     catch (ParseException e) {
        e.printStackTrace();
     }
  }
}

例外与此行有关:JSONObject jsonObject = (JSONObject) jsonData;

我真的不明白为什么它不起作用。我希望有一个人可以帮助我。 我使用json.simple库。

2 个答案:

答案 0 :(得分:1)

您似乎将数据保存为org.json.simple.JSONArray类型。 尝试投射

JSONArray jsonObject = (JSONArray) jsonData;

而不是

JSONObject jsonObject = (JSONObject) jsonData;

答案 1 :(得分:1)

JSON objectJSON array都是JSON数据的有效根。没有办法查询json-simple解析器来自调用的数据类型

Object jsonData = parser.parse(data);

我猜你必须使用instanceof检查你得到的类型,然后进行相应的转换。请注意,JSONArray不会延伸JSONObject,因此您无法在两者之间进行投射。