2017-03-02 97 views
3
JSONArray arr = 
[ 
    {"key1":"value1"}, 
    {"key2":"value2"}, 
    {"key3":"value3"}, 
    {"key4":"value4"} 
] 

arr.get("key1")拋出錯誤。如何通過JSONArray中的密鑰獲取價值?通過鍵獲得價值jsonarray

arr.getString("key1")也會報錯。我應該循環訪問數組嗎?這是唯一的方法嗎?

什麼是錯誤?

在Eclipse Debug透視圖中,這些表達式返回爲; error(s)_during_the_evaluation

+0

http://stackoverflow.com/questions/1568762/accessing-members-of-items-in-a-jsonarray-with-java –

+0

這不是有效的Java。但無論如何,這是一個JSON *數組*。所以你需要在數組中找到* index所需的元素。這是一個對象。該對象具有鍵和值。 –

+0

'arr.getJSONObject(0).getString(「key1」)'返回我想要的。實際上,不是循環遍歷數組,我想要像在js中那樣獲取「arr.key1」的值。但我想我應該循環遍歷數組來找到索引,對嗎? – mmu36478

回答

6

您可以分析您的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(); 
     } 
    } 
2
for (int i = 0; i < arr.length(); ++i) { 

    JSONObject jsn = arr.getJSONObject(i); 

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

您需要通過陣列來獲得每個JSONObject的迭代。一旦你有json的對象,你可以通過使用keys

2

得到values聽起來就像你想從一個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」是指一個字符串對象。

-1

你可以很容易通過按鍵得到了JSON數組元素是這樣的:

var value = ArrName['key_1']; //<- ArrName is the name of your array 
console.log(value); 

或者你也可以這樣做:

var value = ArrName.key_1; 

這就是它!

+0

這絕對不行。 –

+0

這不是Java。 – Henry