假设我有json数据
data = {"id":1,
"name":"abc",
"address": {"streetName":"cde",
"streetId":2
}
}
现在我正在获取要从这个 json 数据中访问的字段,例如:
fields = ["id", "name", "address.streetName"]
如何以最有效的方式从给定的 json 数据访问第三个字段(
address.streetName
)?data.fields[2]
不工作一种可能性是我构造
data[address][streetName]
使用for循环的字符串并对其进行评估,但是有没有有效的方法来做到这一点?
最佳答案
老实说,我无法理解你的问题。 JSON 已经结构化了,为什么还要改变结构呢?
在您的情况下,我将按如下方式访问它:
data.address.streetName;
如果有任何机会,您想要遍历数据,您将需要:
function traverse_it(obj){
for(var prop in obj){
if(typeof obj[prop]=='object'){
// object
traverse_it(obj[prop[i]]);
}else{
// something else
alert('The value of '+prop+' is '+obj[prop]+'.');
}
}
}
traverse_it(data);
更新
阅读下文后,该用户的需求似乎更加明显。给定属性名称作为字符串,他/她想要访问该对象。
function findProp(obj, prop, defval){
if (typeof defval == 'undefined') defval = null;
prop = prop.split('.');
for (var i = 0; i < prop.length; i++) {
if(typeof obj[prop[i]] == 'undefined')
return defval;
obj = obj[prop[i]];
}
return obj;
}
var data = {"id":1,"name":"abc","address":{"streetName":"cde","streetId":2}};
var props = 'address.streetName';
alert('The value of ' + props + ' is ' + findProp(data, props));
关于javascript - 如何访问嵌套的 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9463233/