Getting all objects within an object JSON Java Android

不问归期 提交于 2020-01-17 02:42:14

问题


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);
    }
}

回答1:


Get the keys for the JSON Object with keys() and then iterate over them.

Iterator<String> keys = json.keys();

while (keys.hasNext())
{
    // Get the key
    String key = keys.next();

    // Get the value
    JSONObject value = json.getJSONObject(key);

    // Do something...
}



回答2:


You can use Iterator for parsing the data

  Iterator<?> keys = jObject.keys();

    while( keys.hasNext() ) {
        String key = (String)keys.next();
        if ( jObject.get(key) instanceof JSONObject ) {
    ...
...
..
        }
    }



回答3:


Here's an example to get all Values from JSON Document recursivly. Here import org.json.* is used

    public static void printJSON(JSONObject jsonObj) {
    //Iterating Key Set
    for (Object keyObj : jsonObj.keySet()) {
        String key = (String) keyObj;
        Object valObj = jsonObj.get(key);
        //If next entry is Object
        if (valObj instanceof JSONObject) {
            // call printJSON on nested object
            printJSON((JSONObject) valObj);
        } 
        //iff next entry is nested Array
        else if (valObj instanceof JSONArray) {
            System.out.println("NestedArraykey : " + key);
            printJSONArray((JSONArray) valObj);

        } else {
            System.out.println("key : " + key);
            System.out.println("value : " + valObj.toString());
        }
    }
}

public static void printJSONArray(JSONArray jarray) {
    //Get Object from Array 
    for (int i = 0; i < jarray.length(); i++) {
        printJSON(jarray.getJSONObject(i));
    }

}


来源:https://stackoverflow.com/questions/31025665/getting-all-objects-within-an-object-json-java-android

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!