So im trying to consume the League of Legends API which returns a JSON response. Im not using a fancy lib like Jakcson or GSON,
{"type":"champion","version":"5.11.1","data":{"Thresh":{"id":412,"key":"Thresh","name":"Thresh","title":"the Chain Warden"},"Aatrox":{"id":266,"key":"Aatrox","name":"Aatrox","title":"the Darkin Blade"},"Tryndamere":{"id":23,"key":"Tryndamere","name":"Tryndamere","title":"the Barbarian King"},"Gragas":{"id":79,"key":"Gragas","name":"Gragas","title":"the Rabble Rouser"}}}
But when I try to get to the objects within the data object I must explicity list the key name in my code.
And the key names are really dynamic, so its not practical.
Is there any way to get all the objects within the data object without explicitly calling out the key names?
Heres my Java Client side code
public String callApi(String API_URL) throws IOException {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(API_URL)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
public void buttonClick(View view) throws IOException, JSONException {
String API_URL = "https://global.api.pvp.net/api/lol/static-data/tr/v1.2/champion?locale=en_US&api_key=my_key_here";
String champions_json = callApi(API_URL);
Log.i("summoner",champions_json);
JSONObject json= new JSONObject(champions_json);
JSONObject data = json.getJSONObject("data");
Log.i("summoner", String.valueOf(data));
List<String> champions = new ArrayList<String>();
champions.add("Garen");
champions.add("Aatrox");
champions.add("Thresh");
for (String champion : champions) {
JSONObject object = new JSONObject(String.valueOf(data));
String name = object.getString(champion);
Log.i("summoner",name);
}
}
Get the keys for the JSON Object with
keys()
and then iterate over them.