我在使用数组解析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
答案 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
}
});