如何使用JSON.parse在JavaScript中使用JSONArray解析JSONObject

时间:2013-12-21 16:25:11

标签: javascript android json

我在使用数组解析JSON对象时遇到问题,并根据Key获取值。我在我的一个Android应用程序中执行此操作。我打算将应用程序移植到Web应用程序。在android中我做这样的事情:

让我们说我的json是这样的:

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

我的代码在Android中看起来像这样:

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);

基本上,我根据列表视图中Clicked项的位置获取url。 是否有一个更简单的解决方案,我将传递密钥说radio1并在Javascript中获取相应的值url1

1 个答案:

答案 0 :(得分:2)

  

是否有一个更简单的解决方案,我将传递密钥说放射线1并在Javascript中获取相应的值url1

不,使用该数据的结构,您仍然需要遍历条目,以查找具有匹配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
    }
});