我正在为游戏使用API,它会返回一个非常大的JSON对象。问题是,当我尝试访问其中的整数时,它无法正常工作并在logcat中显示一部分JSON对象,带有橙色文本system.err。如何在这个数组中访问我想要的任何值?
json对象的代码和结构如下所示。
private class getGame extends AsyncTask<Integer, Integer, String>{
Context context;
private getGame(Context context) {
this.context = context.getApplicationContext();
}
String response;
@Override
protected String doInBackground(Integer... params) {
HttpClient client = new DefaultHttpClient();
String geturl = "https://eu.api.pvp.net/api/lol/tr/v1.3/game/by-summoner/1795120/recent?api_key=cea2196c-6a12-474f-8f6d-52ad5e612cbc";
HttpGet get = new HttpGet(geturl);
HttpResponse responseGet = null;
try {
responseGet = client.execute(get);
HttpEntity resEntityGet = responseGet.getEntity();
response = EntityUtils.toString(resEntityGet);
JSONObject jsonObj = new JSONObject(response);
JSONObject gamesObj = jsonObj.getJSONObject("games");
JSONObject game0 = jsonObj.getJSONObject("0");
Log.e("test", ""+game0.getInt("gameId"));
return "";
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
答案 0 :(得分:4)
试试这个..
{ // JSONObject
"games": [ // JSONArray
更改此
JSONObject gamesObj = jsonObj.getJSONObject("games");
到
JSONArray gamesObj = jsonObj.getJSONArray("games").getJSONObject(0).getJSONArray("fellowPlayers");
JSONObject game0 = jsonObj.getJSONObject(0);
更多说明
JSONObject jsonObj = new JSONObject(response);
JSONArray gamesarray = jsonObj.getJSONArray("games");
JSONObject game0 = gamesarray.getJSONObject(0);
JSONArray fellowarray = game0.getJSONArray("fellowPlayers");
JSONObject fellow0 = fellowarray.getJSONObject(0);
Log.e("test", ""+fellow0.getInt("gameId"));
答案 1 :(得分:0)
如果你真的想要解析一个非常大的json,请使用允许流式传输的json库。
http://wiki.fasterxml.com/JacksonInFiveMinutes(查看Streaming API示例)
杰克逊确实允许Streaming。
如果你只是不知道如何解析数组,那么你应该改变你的问题。
如果你只是想解析一个数组,你必须验证是否有{或[是一个对象或一个数组。您还可以使用
验证结果是数组还是对象JSONObject json;
Object info;
JSONArray infoJsonArray;
JSONObject infoObject;
json = new JSONObject(str);
Object info= json.get("games");
if (info instanceof JSONArray) {
// It's an array
infoJsonArray = (JSONArray)info;
}
else if (info instanceof JSONObject) {
// It's an object
infoObject = (JSONObject)info;
} else {
// It's something else, like a string or number
}