我想解析一个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)
有人可以帮助我,我无法找到问题所在,谢谢。
答案 0 :(得分:2)
问题在于以下几点:
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 );
答案 1 :(得分:2)
在@nogard
答案的扩展名中,我检测到文件中的 JSON 文本中有错误,JSON字符串就像 java map 或 javascript对象具有键值对,在您的文件键中定义错误,它应该是双引号(&#34;&#34;)所以键值对看起来像&#34; key&#34;:&#34; value String&#34; 或&#34; key&#34;:value Number 。有关详细信息,请查看link。
修改后你的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文件将解决您的问题。
答案 2 :(得分:1)
如果json不是以#strong>&#34; {&#34; ...开头,那么json就不是json了。这是Exception消息的主要解释。< / p>
重新格式化json文档并重试。
答案 3 :(得分:1)
异常非常清楚(一次!)。 JSON内容必须以{
或[
开头,因为它必须至少定义根对象或数组。
编辑
您发布的JSON内容实际上是正确的(您使用Web实用程序jsonlint验证了很好),因为它定义了一个元素数组。问题出在于使用Java API for JSON。实际上,正如@nogard在他的回答中所示,JSONObject String构造函数期望一些JSON内容而不是文件名。
(见official doc)。所以你的解析器试图将文件名解释为一些JSON内容,因此失败(因为文件名“fichier
”是 NOT 一个有效的JSON字符串)。
所以你应该先通过输入流获取文件内容,然后在序列化实用程序的帮助下构建你的JSON对象:
String json = IOUtils.toString(JsonParsing.class.getResourceAsStream("C:\\listesanscoord.json"));
JSONObject jsonObj = (JSONObject) JSONSerializer.toJSON( json );