我需要从文件(在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.
请帮助..
答案 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。