2013-12-21 109 views
1

我無法使用數組解析JSON對象並獲取基於Key的值。我在我的一個Android應用程序中執行此操作。我計劃將應用程序移植到Web應用程序。在Android的我做這樣的事情:如何使用JSON.parse在JavaScript中使用JSONArray解析JSONObject

比方說我的JSON是這樣的:

{"radios":[{"name":"radio1","url":"url1"},{"name":"radio2","url":"url2"}, {"name":"radio3","url":"url3"}] } 

我的代碼看起來像這樣在安卓

JSONArray radioListArray = jsonObject.getJSONArray("radios"); 
ArrayList<String> radioUrlColl = new ArrayList<String>(); 
    for(int i=0; i<radioListArray.length(); i++) { 
      JSONObject radObject = radioListArray.getJSONObject(i); 
      radioUrlColl.add(radObject.getString("url")); 
    } 
Intent radioIntent = new Intent(arg0.getContext(), PlayerActivity.class); 
      String url =radioUrlColl.get(arg2); //I get the URL here 
      radioIntent.putExtra("radioUrl", url); 

基本上,我得到一個基於網址點擊項目在列表視圖中的位置。 是否有一個簡單的解決方案,我會通過鑰匙說收音機1和得到相應的價值爲url1在Javascript

回答

2

是否有一個簡單的解決方案,我會通過鑰匙說收音機1和得到相應的價值爲url1在Javascript

不,使用該數據的結構,您仍然需要循環查找具有匹配name屬性的條目的條目。

所以說obj是對包含該JSON文本的字符串調用JSON.parse的結果,並且targetRadio是您想要的無線電。 obj.radios將是數組。所以,你可以使用一個簡單for循環:

var n; 
var url; 
for (n = 0; n < obj.radios.length; ++n) { 
    if (obj.radios[n].name === targetRadio) { 
     url = obj.radios[n].url; 
     break; 
    } 
} 

或者,如果你想依靠ES5的陣列增強(這可以在需要時墊高),你可以使用some

var url; 
obj.radios.some(function(entry) { 
    if (entry.name === targetRadio) { 
     url = entry.url; 
     return true; // To stop looping 
    } 
}); 
+0

偉大的答案!不勝感激! – Peshal

相關問題