4

Web サービスからの応答を解析して、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使用できます。あなたの場合、設定を aにして、それを経由して取得し、ループでより適切に解析 できるようにする必要がありますgetJSONObject(i)JSONArrayJSONArray [{"Pref1":"Juan"},{"Pref2":"JuanK"}]getJSONArray()getJSONObject(i)

于 2013-07-24T13:13:19.723 に答える