【问题标题】:Iterating through JSONObject遍历 JSONObject
【发布时间】:2013-07-24 13:08:49
【问题描述】:

我将来自 Web 服务的响应解析为 JSONObject,当记录时,如下所示:

{"Preferences":"{Pref1=Apple, Pref2=Pear}"}

我了解如何请求 Preferences 标签,例如jsonObject.get("Preferences")。但是,我不明白我要返回什么对象,也不明白如何迭代它。如何遍历jsonObject.get("Preferences")返回的对象?

【问题讨论】:

  • 在这种特殊情况下,您不会得到一个 json 对象,而是一个字符串
  • @blackbelt 是对的。也许服务应该返回 {"Preferences":{"Pref1" : "Apple", "Pref2":"Pear"}}。

标签: android json


【解决方案1】:

首选项返回的对象是String。如果您想遍历 Preferences 的子项,您可能需要更改结构,例如:

{"Preferences":{"Pref1":"Apple", "Pref2":"Pear"}}

并像这样解析它:

JSONObject inputJSON = new JSONObject("{\"Preferences\":{\"Pref1\":\"Apple\", \"Pref2\":\"Pear\"}}");
JSONObject preferencesJSON = inputJSON.getJSONObject("Preferences");
Iterator<String> keysIterator = preferencesJSON.keys();
while (keysIterator.hasNext()) 
{
        String keyStr = (String)keysIterator.next();
        String valueStr = preferencesJSON.getString(keyStr);
}

或者,如果你想保留你的结构,你可以通过 Preferences 对象解析返回的字符串,如下所示:

JSONObject inputJSON = new JSONObject("{\"Preferences\":\"{Pref1=Apple, Pref2=Pear}\"}");
String preferencesStr = inputJSON.getString("Preferences");
JSONObject preferencesJSON = new JSONObject(preferencesStr);
Iterator<String> keysIterator = preferencesJSON.keys();
while (keysIterator.hasNext()) 
{
        String keyStr = (String)keysIterator.next();
        String valueStr = preferencesJSON.getString(keyStr);
}

【讨论】:

    【解决方案2】:

    上面的JsonObject不能遍历,但是如果是这样的话

    ["Preferences":{"Pref1":"Juan", "Pref2":"JuanK"}]
    

    你可以这样做

    JSONArray array = new JSONArray(dataInStringForm);
    
    for (int i=0;i< array.length(); i++)
    {
       JSONObject json = array.getJsonObject(i);
    
       System.out.println(json.getString("Pref1"));
       System.out.println(json.getString("Pref2"));
    }
    

    【讨论】:

    • 这可能(未经测试)在 json.getString("Pref1")json.getString("Pref2") 处抛出 JSONException,因为 Pref1 和 Pref2 未映射。
    • 我知道当json数据从互联网返回时,每个字符串都用引号“”括起来,所以只要JsonData格式正确,这段代码就不会出现任何异常。
    • 现在它会抛出一个JSONException,因为你使用了=而不是:;)
    • 你可能想要:["Preferences":{"Pref1":"Juan", "Pref2":"JuanK"}]
    【解决方案3】:

    您可以解析来自JSONObject 的值,并且可以在循环中使用getJSONObject(i)(如果它是JSONArray)。在您的情况下,您应该将您的偏好设置为JSONArray [{"Pref1":"Juan"},{"Pref2":"JuanK"}] 所以你可以通过getJSONArray() 获取它,然后通过getJSONObject(i) 在循环中更好地解析它

    【讨论】:

      【解决方案4】:

      试试这个

      Iterator<String> iter = json.keys();
              while (iter.hasNext()) {
                  String key = iter.next();
                  try {
                      Object value = json.get(key);
                  } catch (JSONException e) {
      
                  }
              }
      

      如果是数组则

      JSONArray key= (JSONArray) jsonObject.get("yourKey");
              Iterator<String> iterator = key.iterator();
              while (iterator.hasNext()) {
                  System.out.println(iterator.next());
              }
      

      【讨论】:

        猜你喜欢
        • 2012-02-27
        • 2021-05-28
        • 1970-01-01
        • 2011-05-27
        • 2014-08-13
        • 1970-01-01
        • 1970-01-01
        • 2022-08-10
        • 1970-01-01
        相关资源
        最近更新 更多