一尘不染

如何访问嵌套的JSON数据

javascript

假设我有json数据,例如

data = {"id":1,
        "name":"abc",
        "address": {"streetName":"cde",
                    "streetId":2
                    }
        }

现在我正在从该json数据访问字段,例如: fields = ["id", "name", "address.streetName"]

如何address.streetName以最有效的方式从给定的json数据访问第三个字段()? data.fields[2]不起作用

一种可能是我data[address][streetName]使用for循环构造字符串,然后进行eval评估,但是有没有有效的方法呢?


阅读 578

收藏
2020-05-01

共1个答案

一尘不染

老实说,我无法理解您的问题。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));
2020-05-01