2017-09-04 49 views
-2

使用此代码调用steam api。解析json给了我一些问题。我设法在控制台中打印json,访问更多数据失败。这里是我的代码:Java json异常

JSONObject json = new JSONObject(IOUtils.toString(new URL("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXXXXX&steamids=XXXXXXX"), Charset.forName("UTF-8"))); 
System.out.println(json.get("response")); >>> (1) 
int out = json.getJSONObject("players").getInt("steamid"); 
System.out.println(out); 

Exception in thread "main" org.json.JSONException: JSONObject["players"] not found. 

{ 
    "response": { 
     "players": [ 
      { 
       "steamid": "XXXXX", 
       "communityvisibilitystate": 3, 
       "profilestate": 1, 
       "personaname": "XXXXX", 
       "lastlogoff": 123123, 
       "profileurl": "http://steamcommunity.com/id/XXX/", 
       "avatar": "XXXXX", 
       "avatarmedium": "XXXX", 
       "avatarfull": "XXXXX", 
       "personastate": 1, 
       "primaryclanid": "XXX", 
       "timecreated": XXX, 
       "personastateflags": 0, 
       "gameextrainfo": "Tom Clancy's Rainbow Six Siege", 
       "gameid": "359550" 
      } 
     ] 

    } 
} 
+3

玩家是JSONArray而不是JSONObject –

回答

2

你只需要了解的JSONObject结构和的区别JSONArray结构

的的JSONObject将以开头“{”,并且JSONArray以开头“[”

我刚刚注意到你的错误,你没有将任何变量分配给json.get(“response”)

JSONObject json = new JSONObject(IOUtils.toString(new URL("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXXXXX&steamids=XXXXXXX"), Charset.forName("UTF-8"))); 
      System.out.println(json.get("response")); 
     JSONObject playersJson=json.get("response"); 
     int out = playersJson.getJSONArray("players").getJSONObject(0).getInt("steamid"); 

因此,请尝试更改您的代码,如上所述。

+0

谢谢你花时间。它仍然给我一个错误 - 找不到JSONObject [“players”]。 – piguy

+0

您是否尝试更改代码?基于以上 –

+0

是的,我复制了上面的代码,并将URL更改为正确的一个 – piguy

1

您的问题是players不是JSONObject,这是一个JSONArray包含JSONObject秒。在这种情况下,players包含一个JSONObject,所以你需要先访问该对象使用players[0]

int out = json.getJSONArray("players")[0].getInt("steamid"); 
+0

谢谢你花时间!它给了我一个错误 - 表达式的类型必须是数组类型,但它解析为JSONArray – piguy