【问题标题】:Getting all objects within an object JSON Java Android获取对象 JSON Java Android 中的所有对象
【发布时间】:2015-09-10 14:28:19
【问题描述】:

所以我尝试使用返回 JSON 响应的英雄联盟 API。我没有使用像 Jakcson 或 GS​​ON 这样的花哨的库,

{"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"}}}

但是当我尝试访问数据对象中的对象时,我必须在我的代码中明确列出键名。

而且键名是动态的,所以不实用。

有没有什么方法可以在不显式调用键名的情况下获取数据对象中的所有对象?

这是我的 Java 客户端代码

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

【问题讨论】:

    标签: android json-api


    【解决方案1】:

    使用keys() 获取 JSON 对象的键,然后对其进行迭代。

    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】:

      你可以使用Iterator来解析数据

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

      【讨论】:

        【解决方案3】:

        这是一个从 JSON 文档中递归获取所有值的示例。 这里使用了 import org.json.*

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

        【讨论】:

          猜你喜欢
          • 2022-01-24
          • 1970-01-01
          • 2016-12-28
          • 2016-10-12
          • 1970-01-01
          • 1970-01-01
          • 2011-11-14
          • 2022-11-29
          • 2012-11-26
          相关资源
          最近更新 更多