2015-09-23 30 views
1
for (int i = 0; i < jsonArray.length(); i++){ 
       System.out.println(jsonArray.getJSONObject(i)); 
       System.out.println(jsonArray.getJSONObject(i).names()); 
      } 

將打印對,然後單個對象,如返回鍵值對的字符串表示JSONArray

{"key1":"a"} 
["key1"] 
{"key2":"b"} 
["key2"] 
{"key3":"c"} 
["key3"] 
{"key4":"d"} 
["key4"] 
... 
{"keyn":"end"} 
["keyn"] 

我想for循環能夠抓住的字符串解釋鍵和每個對象的值分開。

我一直在尋找通過JSONObject API,但我似乎無法找到一種方法在那裏會做到這一點。這很容易搶值的名稱,如果你知道密鑰的名稱:

jsonObject.getString(whenYouKnowTheKeyName)); 

但是當我通過循環數組我假設我既不知道。我期待得到

key1 
a 
key2 
b 
key3 
c 
key4 
d 
... 

作爲輸出。我試圖從已經創建的JSON對象讀取,而不是創建一個新的。

+1

你試過JSONObject的'鍵和名字'方法嗎? – bsingh

+0

可能重複[在JSON中創建鍵值對字符串](http://stackoverflow.com/questions/16306271/create-key-value-pairs-string-in-json) – michaelsnowden

+0

@michaelsnowden如果我沒有弄錯,我相信這個問題實際上與那個問題完全相反,而不是一個騙局。 – gla3dr

回答

1

假設在jsonArray對象始終只包含一個鍵,下面應該打印鍵和值在每一個對象,你想:

for (int i = 0; i < jsonArray.length(); i++) { 
    JSONObject jsonObject = jsonArray.getJSONObject(i); 
    Iterator<String> keys = jsonObject.keys(); 
    String key = keys.next(); 
    Object value = jsonObject.get(key); 
    System.out.println(key); 
    System.out.println(value); 
} 

但是,您可能要處理所有的所有鍵對象通過包裝在while (keys.hasNext())迭代循環的每個鍵和值:

for (int i = 0; i < jsonArray.length(); i++) { 
    JSONObject jsonObject = jsonArray.getJSONObject(i); 
    Iterator<String> keys = jsonObject.keys(); 
    while (keys.hasNext()) { 
     String key = keys.next(); 
     Object value = jsonObject.get(key); 
     System.out.println(key); 
     System.out.println(value); 
    } 
} 

你的榜樣,這兩種解決方案具有相同的輸出,但顯然後者更靈活。