如何访问嵌套的JSON数据 [英] How to access nested JSON data

查看:136
本文介绍了如何访问嵌套的JSON数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有json数据,如

Let say I have json data like

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

现在我要从这个json数据中获取字段,如: fields = [id,name ,address.streetName]

Now I am getting fields to be accessed from this json data like : fields = ["id", "name", "address.streetName"]

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

How could I access third field (address.streetName) from given json data in most efficient way? data.fields[2] doesn't work

一种可能性是我构建 data [address] [streetName] 使用for循环的字符串并执行eval,但有没有有效的方法呢?

One possibility is I construct data[address][streetName] string using a for loop and do eval of that but is there any efficient way of doing this?

推荐答案

说实话,我无法理解你的问题。 JSON已经结构化了,为什么你需要更改结构?

To be honest, I can't understand your problem. JSON is already structured out, why do you need to change the structure?

在这种情况下,我会按如下方式访问它:

In you case, I would access it as follows:

data.address.streetName;

如果您想要的话,遍历数据,你需要:

If, by any chance, what you want is to traverse the data, you would need:

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






更新

阅读下面的内容后,这个用户需要的内容似乎更加明显。将属性名称作为字符串,他/她想要访问该对象。

After reading below, what this user needs seems more obvious. Given property names as a string, s/he wants to access the object.

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

这篇关于如何访问嵌套的JSON数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆