具有非固定键的对象的获取属性

时间:2018-09-10 07:12:13

标签: android json gson retrofit2

假设我从网络服务获得此JSon响应:

{
    "id":13,
    "name":"Alireza",
    "required_id":"14",
    "all_friends_id_and_name":{
        "28":"Hassan",
        "21":"Mohammad",
        "68":"Ali",
        "14":"Taha",
        "96":"Darya"
    }
}

在此响应中,required_id值指定我需要一个ID为14的朋友名称,因此在all_friends_id_and_name对象中,我应获取值“ 14”(塔哈),并在我的应用中使用它。

我正在使用Retrofit2和gson库。

如何获取具有非固定键的对象的属性?

2 个答案:

答案 0 :(得分:1)

RETROFIT 在此情况下无济于事。对于本机方法,可以尝试使用Iterator

  

迭代器是使程序员能够遍历一个对象的对象。   容器,尤其是列表。

 "all_friends_id_and_name":{
        "28":"Hassan",
        "21":"Mohammad",
        "68":"Ali",
        "14":"Taha",
        "96":"Darya"
    }

对于以上部分,您的 LOGIC 将是

     JSONObject jsonData = new JSONObject("Json_response");
          Iterator  iteratorObj = jsonData .keys();
           while (iteratorObj.hasNext())
            {
                String str_json_Key = (String)iteratorObj.next();
                 // Print=28,21....96
             }

答案 1 :(得分:0)

这是你的杰森:

{
    "id":13,
    "name":"Alireza",
    "required_id":"14",
    "all_friends_id_and_name":{
        "28":"Hassan",
        "21":"Mohammad",
        "68":"Ali",
        "14":"Taha",
        "96":"Darya"
    }
}

尝试这样做:

 try {

     JSONObject jsonObject; // it should be your above JsonObject 

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

            while (keys.hasNext()) {
                String key = (String) keys.next();
                System.out.println("Mykey: " + key + " value: " + jsonObject.getString(key));    
            }


    } catch (JSONException e) {
        e.printStackTrace();
    }