Read JSON error: org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
Read JSON error: org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
正如您在标题中所见,当我尝试读取 Riot-Games API 中可用的 JSON 文件时出现错误。我尝试 return 使用其 summonerID 的用户的当前等级和等级。当我尝试获取 summonerID 时,我没有收到此错误。
我想问题是 JSON 文件以“[”和“]”开头和结尾。因此,我正在寻找一个关于如何提取其中某些部分的解决方案(例如:等级、排名和联赛积分)。
这是我收到召唤师 ID 的方式:
public static String getSummonerID(String summoner) throws IOException, JSONException {
JSONObject json = readJsonFromUrl("https://euw1.api.riotgames.com/lol/summoner/v3/summoners/by-name/" + summoner +"?api_key="+ api_key);
return json.get("id").toString();
}
这是我尝试接收有关当前层的信息的方式:
public static String getSummonerTierSoloQ(String summoner) throws IOException, JSONException {
JSONObject json = readJsonFromUrl("https://euw1.api.riotgames.com/lol/league/v3/positions/by-summoner/" + getSummonerID(summoner) +"?api_key="+ api_key);
return json.toString();
}
获取的JSON文件如下所示:
[
{
"leagueId": "",
"leagueName": "Soraka's Mercenaries",
"tier": "SILVER",
"queueType": "RANKED_SOLO_5x5",
"rank": "III",
"playerOrTeamId": "",
"playerOrTeamName": "JieBäf",
"leaguePoints": 58,
"wins": 142,
"losses": 134,
"veteran": true,
"inactive": false,
"freshBlood": false,
"hotStreak": false
},
{
"leagueId": "",
"leagueName": "Sion's Marksmen",
"tier": "SILVER",
"queueType": "RANKED_FLEX_SR",
"rank": "IV",
"playerOrTeamId": "",
"playerOrTeamName": "JieBäf",
"leaguePoints": 23,
"wins": 96,
"losses": 98,
"veteran": true,
"inactive": false,
"freshBlood": false,
"hotStreak": false
}
]
准确的错误代码是:
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:183)
at org.json.JSONObject.<init>(JSONObject.java:309)
at dev.reader.JsonReader.readJsonFromUrl(JsonReader.java:33)
at dev.reader.JsonReader.getSummonerTierSoloQ(JsonReader.java:56)
at dev.reader.JsonReader.output(JsonReader.java:45)
at dev.main.Load.main(Load.java:15)
差点忘了方法readJsonFromURL和readAll:
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
InputStream is = new URL(url).openStream();
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONObject json = new JSONObject(jsonText);
return json;
} finally {
is.close();
}
}
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
感谢您的帮助:D
JieBäf |芬恩
使用的代码来自 Whosebug,不是我写的,但似乎没有预期的那么完美。
您试图阅读的是 "json array" 中包含的两个 "json objects"。我不熟悉你正在使用的库(我更喜欢 Jackson),但应该有一种方法可以将这个字符串读取为 json array, 然后 从中检索两个 json 对象。
我不确定您的问题是否已解决。当我第一次开始使用 JSON 时,我遇到了同样的错误。在这里发布我的答案,这样如果其他人最终在这里寻找答案可以很容易地找到它。当您没有将正确的参数传递给正确的 get 函数调用时,就会出现此错误。我们其实是要一步步进去的。首先,我们要访问根对象,然后我们要得到我们想要的JSON数组。一旦我们有了 JSONArray,我们就可以调用 get(i) 并进一步调用 getString(param) 或 getInt(param).
我已经创建了示例项目。第一个用于 JSON 对象创建,第二个用于 JSON 解析。
创建 JSON 对象:https://github.com/vikram-bhardwaj/RestServer_Mar2022
正在解析 JSON 文件:https://github.com/vikram-bhardwaj/RestClient_Mar2022
希望对您有所帮助。
正如您在标题中所见,当我尝试读取 Riot-Games API 中可用的 JSON 文件时出现错误。我尝试 return 使用其 summonerID 的用户的当前等级和等级。当我尝试获取 summonerID 时,我没有收到此错误。 我想问题是 JSON 文件以“[”和“]”开头和结尾。因此,我正在寻找一个关于如何提取其中某些部分的解决方案(例如:等级、排名和联赛积分)。
这是我收到召唤师 ID 的方式:
public static String getSummonerID(String summoner) throws IOException, JSONException {
JSONObject json = readJsonFromUrl("https://euw1.api.riotgames.com/lol/summoner/v3/summoners/by-name/" + summoner +"?api_key="+ api_key);
return json.get("id").toString();
}
这是我尝试接收有关当前层的信息的方式:
public static String getSummonerTierSoloQ(String summoner) throws IOException, JSONException {
JSONObject json = readJsonFromUrl("https://euw1.api.riotgames.com/lol/league/v3/positions/by-summoner/" + getSummonerID(summoner) +"?api_key="+ api_key);
return json.toString();
}
获取的JSON文件如下所示:
[
{
"leagueId": "",
"leagueName": "Soraka's Mercenaries",
"tier": "SILVER",
"queueType": "RANKED_SOLO_5x5",
"rank": "III",
"playerOrTeamId": "",
"playerOrTeamName": "JieBäf",
"leaguePoints": 58,
"wins": 142,
"losses": 134,
"veteran": true,
"inactive": false,
"freshBlood": false,
"hotStreak": false
},
{
"leagueId": "",
"leagueName": "Sion's Marksmen",
"tier": "SILVER",
"queueType": "RANKED_FLEX_SR",
"rank": "IV",
"playerOrTeamId": "",
"playerOrTeamName": "JieBäf",
"leaguePoints": 23,
"wins": 96,
"losses": 98,
"veteran": true,
"inactive": false,
"freshBlood": false,
"hotStreak": false
}
]
准确的错误代码是:
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:183)
at org.json.JSONObject.<init>(JSONObject.java:309)
at dev.reader.JsonReader.readJsonFromUrl(JsonReader.java:33)
at dev.reader.JsonReader.getSummonerTierSoloQ(JsonReader.java:56)
at dev.reader.JsonReader.output(JsonReader.java:45)
at dev.main.Load.main(Load.java:15)
差点忘了方法readJsonFromURL和readAll:
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
InputStream is = new URL(url).openStream();
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONObject json = new JSONObject(jsonText);
return json;
} finally {
is.close();
}
}
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
感谢您的帮助:D
JieBäf |芬恩
使用的代码来自 Whosebug,不是我写的,但似乎没有预期的那么完美。
您试图阅读的是 "json array" 中包含的两个 "json objects"。我不熟悉你正在使用的库(我更喜欢 Jackson),但应该有一种方法可以将这个字符串读取为 json array, 然后 从中检索两个 json 对象。
我不确定您的问题是否已解决。当我第一次开始使用 JSON 时,我遇到了同样的错误。在这里发布我的答案,这样如果其他人最终在这里寻找答案可以很容易地找到它。当您没有将正确的参数传递给正确的 get 函数调用时,就会出现此错误。我们其实是要一步步进去的。首先,我们要访问根对象,然后我们要得到我们想要的JSON数组。一旦我们有了 JSONArray,我们就可以调用 get(i) 并进一步调用 getString(param) 或 getInt(param).
我已经创建了示例项目。第一个用于 JSON 对象创建,第二个用于 JSON 解析。
创建 JSON 对象:https://github.com/vikram-bhardwaj/RestServer_Mar2022 正在解析 JSON 文件:https://github.com/vikram-bhardwaj/RestClient_Mar2022
希望对您有所帮助。