【发布时间】:2015-12-15 09:38:56
【问题描述】:
为了找出 JSON 元素是 JSONArray 或 JSONObject 类型的天气,我收到 Unexpected token END OF FILE at position 0 错误。
我的 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);
谢谢。
【问题讨论】:
-
看起来你在 json 前面有一个不可打印的字符
-
如果不熟悉该库,我猜另一个可能的原因是您正在加载一个空文件。 (此外,您的输出不包含异常)。
-
看起来你有一个空文件,不管你认为它包含什么。
-
@Jens,我认为没有任何不可打印的字符,因为我的另一个代码使用相同的 json 文件运行良好。我用更多细节编辑了我的帖子。
-
@Vulcan 我的文件不是空的。我用更多细节编辑了我的帖子。