web-dev-qa-db-ja.com

キーjsonarrayで値を取得

_JSONArray arr = 
[
    {"key1":"value1"},
    {"key2":"value2"},
    {"key3":"value3"},
    {"key4":"value4"}
]
_

arr.get("key1")はエラーをスローします。 JSONArrayのキーで値を取得するにはどうすればよいですか?

arr.getString("key1")もエラーをスローします。配列をループする必要がありますか?それを行う唯一の方法ですか?

エラーは何ですか?

Eclipseデバッグパースペクティブでは、これらの式は次のように返されます。 error(s)_during_the_evaluation

6
mmu36478

以下のコードのように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();
        }
    }
14
Chetan Joshi

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」が文字列オブジェクトを指すことがわかっているため、文字列にキャストします。

4
dwhite5914
for (int i = 0; i < arr.length(); ++i) {

    JSONObject jsn = arr.getJSONObject(i);

   String keyVal = jsn.getString("key1");
}

各JSONObjectを取得するには、配列を反復処理する必要があります。 jsonのオブジェクトを取得したら、valuesを使用してkeysを取得できます。

2
Ravi MCA