4

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

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

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

4

4 回答 4

12

首选项返回的对象是一个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);
}
于 2013-07-24T13:13:26.913 回答
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"));
}
于 2013-07-24T13:19:16.117 回答
0

尝试这个

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());
        }
于 2013-07-24T13:14:59.013 回答
0

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

于 2013-07-24T13:13:19.723 回答