【问题标题】:Getting property of an object which has non-fixed keys获取具有非固定键的对象的属性
【发布时间】:2018-09-10 07:12:12
【问题描述】:

假设我从 webservice 得到这个 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”(Taha)的值并在我的应用程序中使用它。

我正在使用 retrofit2 和 gson 库。

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

【问题讨论】:

标签: android json gson retrofit2


【解决方案1】:

对于 Native 方法,您可以尝试使用 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
             }

【讨论】:

  • 所以没有使用gson库的解决方案?如果答案是“否”,如何将“all_friends_id_and_name”值作为字符串?这是一个改造请求。
  • @AlirezaNoorali 对不起先生,AFAIK,改造对这种情况没有帮助。
  • 还没有解决。正如你所说,Retrofit 对这种情况没有帮助,所以我决定告诉 Web 服务开发人员更改 Web 服务响应。
  • 是的,已经解决了。我们改变了回应。谢谢
  • @AlirezaNoorali 继续前进。
【解决方案2】:

这是你的 Json:

{
    "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();
    }

【讨论】:

    猜你喜欢
    • 2015-05-22
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2020-10-25
    • 2018-07-20
    • 2014-12-09
    相关资源
    最近更新 更多