java.lang.ClassCastException:org.json.simple.JSONArray无法强制转换为org.json.JSONArray

时间:2013-12-18 07:42:49

标签: java android json classcastexception filereader

我需要从文件(在SD卡上)读取JsonArray数据并将其存储到SQLite数据库中。

但我在将数据解析为java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.JSONArray时收到JsonArray异常。

文件中的数据非常庞大,整个数据不能存储在单个String或String Buffer或String Builder中。

这是我的代码。

FileReader fileReader = new FileReader(file_path);
Object obj = jsonParser.parse(fileReader);
JSONArray jsonArray = (JSONArray) obj; // Exception.

请帮助..

2 个答案:

答案 0 :(得分:8)

检查源文件顶部的import语句。

你可能有一句话:

import org.json.JSONArray;

应该是:

import org.json.simple.JSONArray;

如果您在eclipse或任何其他智能IDE中工作,当您开始键入以JSONArray开头的行时,可能会发生此问题。此时,IDE将向您显示导入类JSONArray的不同可能性。您在org.json.JSONArray中有一个,org.json.simple.JSONArray中有一个。后者是正确的,但您选择第一个,并且您的IDE会自动在源java文件的顶部添加一个导入行。

从异常问题非常明显,该异常告诉您,obj对象无法转换为org.json.JSONArray对象,因为它实际上是org.json.simple.JSONArray对象。 (请注意,两者之间存在差异。)

<强>更新

如果您想使用org.json.JSONArray,则应使用除jsonParser之外的其他类,因为此类来自org.json.simple包。目前你正在混合这两个库,这就是导致你麻烦的原因。

答案 1 :(得分:0)

您可以先将文件的全部内容读入String。

FileInputStream fileInputStream = null;
String data="";
StringBuffer stringBuffer = new StringBuffer("");
try{
    fileInputStream=new FileInputStream(filename);
    int i;
    while((i=fileInputStream.read())!=-1)
    {
        stringBuffer.append((char)i);
    }
    data = stringBuffer.toString();
    csvFile.delete();
}
catch(Exception e){
        LoggerUtil.printStackTrace(e);
}
finally{
    if(fileInputStream!=null){  
        fileInputStream.close();
    }
}

现在您将整个内容都包含在String(数据变量)中。

JSONParser parser = new JSONParser();
org.json.simple.JSONArray jsonArray= (org.json.simple.JSONArray) parser.parse(data);

之后,您可以根据需要使用jsonArray。