_JSONArray arr =
[
{"key1":"value1"},
{"key2":"value2"},
{"key3":"value3"},
{"key4":"value4"}
]
_
arr.get("key1")
はエラーをスローします。 JSONArray
のキーで値を取得するにはどうすればよいですか?
arr.getString("key1")
もエラーをスローします。配列をループする必要がありますか?それを行う唯一の方法ですか?
エラーは何ですか?
Eclipseデバッグパースペクティブでは、これらの式は次のように返されます。 error(s)_during_the_evaluation
以下のコードのようにjsonResponse
を解析できます:
private void parseJsonData(String jsonResponse){
try
{
JSONArray jsonArray = new JSONArray(jsonResponse);
for(int i=0;i<jsonArray.length();i++)
{
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
String value1 = jsonObject1.optString("key1");
String value2 = jsonObject1.optString("key2");
String value3 = jsonObject1.optString("key3");
String value4 = jsonObject1.optString("key4");
}
}
catch (JSONException e)
{
e.printStackTrace();
}
}
JSONObjectsの配列から特定のキーを見つけたいように聞こえます。問題は、配列であるため、各要素を反復処理する必要があることです。繰り返しキーがないと仮定した場合の解決策は...
_private Object getKey(JSONArray array, String key)
{
Object value = null;
for (int i = 0; i < array.length(); i++)
{
JSONObject item = array.getJSONObject(i);
if (item.keySet().contains(key))
{
value = item.get(key);
break;
}
}
return value;
}
_
ここで、配列内の「key1」の値を検索するとします。行を使用して値を取得できます:String value = (String) getKey(array, "key1")
。 「key1」が文字列オブジェクトを指すことがわかっているため、文字列にキャストします。
for (int i = 0; i < arr.length(); ++i) {
JSONObject jsn = arr.getJSONObject(i);
String keyVal = jsn.getString("key1");
}
各JSONObjectを取得するには、配列を反復処理する必要があります。 jsonのオブジェクトを取得したら、values
を使用してkeys
を取得できます。