【问题标题】:Get Phone No from JSON Object that have different key [duplicate]从具有不同密钥的 JSON 对象获取电话号码 [重复]
【发布时间】:2018-02-20 11:57:07
【问题描述】:

我有一个包含键值对的 Json 数组,第一个是电话号码,第二个是那个类型 我只需要电话号码(即任何对象的第一个键值对)

以第一个对象为例

“099 28 491993”

,来自第二个对象`

“027-888-13885”

`等等..

{
    "PhoneList": [{
        "Phone1": "099 28 491993",
        "PhoneType": "TYPE_MOBILE"
    }, {
        "Phone2": "027-888-13885",
        "PhoneType": "TYPE_MOBILE"
    }, {
        "Home": "027-824-28797",
        "PhoneType": "TYPE_HOME"
    }, {
        "Phone3": "094 28 401823",
        "PhoneType": "TYPE_MOBILE"
    }, {
        "Phone4": "027-830-13275",
        "PhoneType": "TYPE_MOBILE"
    }, {
        "Home": "027-824-28797",
        "PhoneType": "TYPE_HOME"
    }]
}

谢谢你..任何帮助接受。

【问题讨论】:

  • 请您解释一下这个问题
  • 可以用这个读取数据。但是如果你对 API 做一点小改动,那将是正确的方法
  • 您应该告诉服务器人员更改响应。
  • @Amsheer 和 @Nongthonbam Tonthoi 我无法做出改变回应..
  • @ColonD 请先阅读问题,然后标记为重复。

标签: android json


【解决方案1】:

试试这个

  try {
                JSONObject object= new JSONObject(response);
                  JSONArray phoneListArray = contactObject.getJSONArray("PhoneList");

                for (int j = 0; j < phoneListArray.length(); i++) {
                    JSONObject jsonObject = phoneListArray.getJSONObject(i);
                    Iterator keys = jsonObject.keys();
                    while(keys.hasNext()) {
                        String name = (String) keys.next();
                     // because in every Object Ignoring value Of PhoneType
                        if(!name.equalsIgnoreCase("PhoneType")){
                            String value = String.valueOf(jsonObject.get(name));

                            // do what ever you want with value.

                            Log.e("PHONE", jsonObject.getString(name));
                        }
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

【讨论】:

  • "名称" ???它应该是变量名而不是硬编码的键字符串:)
  • @PareshMayani 我的错误我刚刚更新了答案
  • 谢谢你的回答..这是最合适的回答,这就是我接受的原因..我做了一些改变..我做到了。这 if(!name.equalsIgnoreCase("PhoneType")) 字符串值 = String.valueOf(jsonObject.get(name));因为 Second Key PhoneType 总是相同的。所以最后这个值给了我第一个对象的第一个值..
  • @LearningAlways 很乐意帮助我
  • @LearningAlways 你可以编辑我的答案,这样它也可以帮助其他人
【解决方案2】:

下面只是一个想法,您可以如何迭代动态键。在您的情况下,您必须首先通过 json 对象,然后通过子键进行第二次迭代。


您可以使用.keys() 方法收集密钥,然后对其进行迭代。

Iterator<String> iterator = json.keys();
while (iter.hasNext()) {
    String key = iter.next();
    String value = json.get(key);
}

【讨论】:

  • 我也是这么想的。但是我们如何才能找到关键是“电话”或其他东西..
  • @Amsheer 可以检查PhoneType 键是否持有TYPE_MOBILE 值。
  • 也许用户需要你提到的。但他没有提到他需要TYPE_MOBILE。这就是我困惑的原因。如果他想要这个,那么你的答案将完美无缺。
【解决方案3】:
JSONArray phoneJSONArray = phoneListJsonArray;
    for (int j = 0; j < yourJSONArray.length(); j++) {
      JSONObject phoneJSONObject = yourJSONArray.getJSONObject(j);
      for(int i = 0; i<phoneJSONObject.names().length(); i++){
          Log.v(TAG, "key = " + phoneJSONObject.names().getString(i) + " value = " + phoneJSONObject.get(phoneJSONObject.names().getString(i)));
      }
    }

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    相关资源
    最近更新 更多