为了找出天气,JSON元素是JSONArray或JSONObject类型,我在<0>错误时得到 Unexpected token END OF FILE。
我的JSON是:
{"colors":[{"color":"red","value":"#00"},{"color":"white","value":"#000g"}]}
我的代码是:
java.io.FileReader reader = new java.io.FileReader("jsonpath");
org.json.simple.parser.JSONParser parser = new JSONParser();
System.Out.Println("aaaaaa JSON Class: "+parser.parse(reader).getClass());
if(parser.parse(reader) instanceof org.json.simple.JSONArray)
System.Out.Println("JSONArray");
else if(parser.parse(reader) instanceof org.json.simple.JSONObject)
System.Out.Println("JSONObject");
当我运行上面的代码时,它会显示此输出
aaaaaa JSON Class: class org.json.simple.JSONObject Unexpected token END OF FILE at popsition 0
at org.json.simple.parser.JSONParser(Unknown Source)
.
.
.
<rest of the exception>
我不明白为什么会发生这种异常。 请帮帮我。
修改后的更多详细信息:
我的这段代码与给定的json文件一起工作正常:
java.io.FileReader reader = new java.io.FileReader("jsonpath");
org.json.simple.parser.JSONParser parser = new JSONParser();
org.json.simple.JSONObject object = (JSONObject)parser.parse(reader);
System.Out.Println("JSONObject: "+object);
org.json.simple.JSONArray array = (JSONArray)object.get("colors");
System.Out.Println("JSONArray: "+array);
输出上述代码:
JSONObject: {"colors":[{"color":"red","value":"#00"},{"color":"white","value":"#000g"}]}
JSONArray: [{"color":"red","value":"#00"},{"color":"white","value":"#000g"}]
但我想在不知道JSON结构的情况下动态解析JSON。 我想做这样的事情:
if(json is object)
JSONObject object = (JSONObject)parser.parse(reader);
else if (json is array)
JSONArray array = (JSONArray)parser.parse(reader);
感谢。
答案 0 :(得分:5)
您反复解析相同的Reader
。第一个呼叫耗尽它,然后每个后续呼叫看到一个空流。
答案 1 :(得分:1)
只解析一次阅读器。这是工作代码:
java.io.FileReader reader = new java.io.FileReader("jsonpath");
org.json.simple.parser.JSONParser parser = new JSONParser();
Object p = parser.parse(reader);
if(p instanceof org.json.simple.JSONArray){
System.Out.Println("JSONArray");
org.json.simple.JSONArray object = (JSONArray)p;
}
else if(p instanceof org.json.simple.JSONObject){
System.Out.Println("JSONObject");
org.json.simple.JSONObject object = (JSONObject)p;
}
输出上述代码
JSONObject
答案 2 :(得分:0)
好吧,当您尝试传递错误的路径时,可能会发生错误。
因此,请正确检查json文件的路径。首先尝试使用绝对路径。
这是我的程序:
private static void ReadWithEncoding(String filePath, String encoding) {
StringBuilder json = new StringBuilder();
File f = new File(filePath);
if (f.exists() && f.isFile()) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f), encoding));
String line;
while ((line = br.readLine()) != null) {
json.append(line);
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(json);
}
}
对于UTF8,您可以像这样运行它:
ReadWithEncoding("D:/file.json", "UTF8");
对于西里尔字母符号:
ReadWithEncoding("D:/file.json", "Cp1251");
答案 3 :(得分:0)
我也收到此错误(“位置0处的意外令牌END OF FILE”。)。 我在多个线程上使用了com.google.gson.Gson和org.json.simple.parser.JSONParser的相同实例。 现在,我更改了代码并在每个线程上创建了这些代码的新实例,从而解决了该问题。
gson = new GsonBuilder()。create(); parser = new JSONParser();