我将来自Web服务的响应解析为JSONObject
,在记录时,如下所示:
{"Preferences":"{Pref1=Apple, Pref2=Pear}"}
我了解如何申请偏好设置标记,例如jsonObject.get("Preferences")
。但是,我不明白我要回到什么对象,也不知道如何迭代它。如何迭代jsonObject.get("Preferences")
返回的对象?
答案 0 :(得分:12)
首选项返回的对象是String
。如果要遍历“首选项”的子项,可能需要更改结构,例如:
{"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);
}
答案 1 :(得分: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"));
}
答案 2 :(得分:0)
您可以解析JSONObject
中的值,如果它是getJSONObject(i)
,则可以在循环中使用JSONArray
。在您的情况下,您应该将您的偏好设为JSONArray
[{"Pref1":"Juan"},{"Pref2":"JuanK"}]
所以你可以通过getJSONArray()
获取它,然后通过getJSONObject(i)
答案 3 :(得分: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());
}