8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何访问和处理嵌套对象、数组或 JSON?

Gen 2月前

340 0

我有一个包含对象和数组的嵌套数据结构。我如何提取信息,即访问特定或多个值(或键)?例如:var data = { code: 42, i...

我有一个包含对象和数组的嵌套数据结构。如何提取信息,即访问特定值或多个值(或键)?

例如:

var data = {
    code: 42,
    items: [{
        id: 1,
        name: 'foo'
    }, {
        id: 2,
        name: 'bar'
    }]
};

我如何访问 name 中的第二项 items

帖子版权声明 1、本帖标题:如何访问和处理嵌套对象、数组或 JSON?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Gen在本站《dictionary》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 有时,使用字符串访问嵌套对象是可行的。简单的方法是第一层,例如

    var obj = { hello: "world" };
    var key = "hello";
    alert(obj[key]);//world
    

    但对于复杂的 JSON,情况通常并非如此。随着 JSON 变得越来越复杂,在 JSON 中查找值的方法也变得越来越复杂。使用递归方法来浏览 JSON 是最好的,而如何利用该递归将取决于要搜索的数据类型。如果涉及条件语句, JSON 搜索 可能是一个很好的工具。

    如果访问的属性已经已知,但是路径很复杂,例如在此对象中

    var obj = {
     arr: [
        { id: 1, name: "larry" },    
        { id: 2, name: "curly" },
        { id: 3, name: "moe" }
     ]
    };
    

    并且你知道你想获取对象中数组的第一个结果,也许你想使用

    var moe = obj["arr[0].name"];
    

    但是,这将导致异常,因为没有具有该名称的对象属性。能够使用此功能的解决方案是展平对象的树形结构。这可以递归完成。

    function flatten(obj){
     var root = {};
     (function tree(obj, index){
       var suffix = toString.call(obj) == "[object Array]" ? "]" : "";
       for(var key in obj){
        if(!obj.hasOwnProperty(key))continue;
        root[index+key+suffix] = obj[key];
        if( toString.call(obj[key]) == "[object Array]" )tree(obj[key],index+key+suffix+"[");
        if( toString.call(obj[key]) == "[object Object]" )tree(obj[key],index+key+suffix+".");   
       }
     })(obj,"");
     return root;
    }
    

    现在,复杂对象可以被压平

    var obj = previous definition;
    var flat = flatten(obj);
    var moe = flat["arr[0].name"];//moe
    

    下面是 使用此方法的 jsFiddle 演示

返回
作者最近主题: