社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Community samael

Community samael 最近创建的主题
Community samael 最近回复了

有时,使用字符串访问嵌套对象是可取的。简单的方法是第一个层次,例如

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

但对于复杂的json,情况往往并非如此。随着json变得更加复杂,在json中查找值的方法也变得复杂。导航json的递归方法是最好的,如何利用递归取决于搜索的数据类型。如果涉及条件语句,则 json search 可以很好的使用工具。

如果要访问的属性已知,但路径很复杂,例如在这个对象中

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 Demo 使用这种方法。