[英]JSON parser error with java:
我想解析一个json文件,这是我的代码:
import org.json.JSONArray;
import org.json.JSONObject;
public class principale {
public static void main(String[] args) {
// TODO Auto-generated method stub
String fichier ="C:\\listesanscoord.json";
JSONObject obj = new JSONObject("fichier");
String pageName = obj.getJSONObject("pageInfo").getString("pageName");
JSONArray arr = obj.getJSONArray("oaci");
for (int i = 0; i < arr.length(); i++)
{
String url = arr.getJSONObject(i).getString("url");
}
}
}
这是我的json文件: listesanscoord.json我有以下错误:
Exception in thread "main" org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
at org.json.JSONTokener.syntaxError(JSONTokener.java:433)
at org.json.JSONObject.<init>(JSONObject.java:198)
at org.json.JSONObject.<init>(JSONObject.java:325)
at metar.principale.main(principale.java:13)
有人可以帮我吗,我找不到问题所在,谢谢。
问题出在以下几行:
String fichier ="C:\\listesanscoord.json";
JSONObject obj = new JSONObject("fichier");
通常,您应该传递文件的内容,而不仅仅是文件名(或“ fichier”):
InputStream is = JsonParsing.class.getResourceAsStream("C:\\listesanscoord.json");
String jsonTxt = IOUtils.toString( is );
JSONObject json = (JSONObject) JSONSerializer.toJSON( jsonTxt );
在@nogard
答案的扩展名中,我检测到文件中的JSON文本有错误 ,JSON字符串就像java map或javascript对象具有键值对,在您的文件键中定义错误,它应该用双引号(“” ),因此键值对看起来就像“ key”:“ value String”或“ key”:value Number一样 。 有关更多信息,请参见链接 。
修改后,您的json将如下所示。
[
{
"oaci": "LFXA",
"aeroport": "Aérodrome d'Ambérieu",
"url": "https://fr.wikipedia.org/wiki/A%C3%A9rodrome_d%27Amb%C3%A9rieu",
"commune": "Chateau-Gaillard, Ambronay"
}
//more json objects
]
如果您像上面那样修改json文件,将解决您的问题。
如果您的json并非以“ {”开头(这是Exception消息的主要解释),则根本不是json。
重新格式化json文档,然后重试。
异常非常明显(一次!)。 JSON内容必须以{
或[
开头,因为它必须至少定义一个根对象或数组。
编辑
您发布的JSON内容实际上是正确的(可以通过Web实用程序jsonlint进行验证),因为它定义了元素数组。 问题是由Java API用于JSON引起的。 确实,如@nogard在他的答案中所示,JSONObject String构造函数期望一些JSON内容而不是文件名。 (请参阅官方文档 )。 因此,您的解析器尝试将文件名解释为某些JSON内容,从而失败(因为文件名“ fichier
” 不是有效的JSON字符串)。
因此,您应该在例如通过输入流获取文件内容之前,并借助序列化实用程序来构建JSON对象:
String json = IOUtils.toString(JsonParsing.class.getResourceAsStream("C:\\listesanscoord.json"));
JSONObject jsonObj = (JSONObject) JSONSerializer.toJSON( json );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.