2013-12-21 45 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

相关问题