javascript - 如何访问嵌套的 JSON 数据

标签 javascript json object

假设我有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/

相关文章:

c# - 是否有开箱即用的方法来反序列化 Json.Net 中的抽象类?

java - 在 Android 中使用 MyApplication 类获取 JSON 数据

ruby - 如何从 Ruby 中的字符串 "A::B::C"获取类对象?

c++ - 无法理解 tinyxml 教程以及如何使用它

javascript - 如何迭代 JSON 列表?

javascript - 相互依赖的 graphQl 类型

javascript - 嵌套模型模板 - 主干和下划线

javascript - 更改具有透明背景的 png 的纯色,是否可能?

json - Postgresql - 插入后 "Returning" "inserted"行作为 json

具有序列号的 Java 对象