专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 JS遍历json对象树的所有节点

JS遍历json对象树的所有节点

更新时间:2022-10-17 10:52:21 来源:赢咖4 浏览1245次

遍历 JSON 对象树,但找不到任何库。这似乎并不困难,但感觉就像重新发明轮子。

In XML there are so many tutorials showing how to traverse an XML tree with DOM

如果你认为 jQuery 对于这样一个原始任务来说有点矫枉过正,你可以这样做:

//your object
var o = { 
    foo:"bar",
    arr:[1,2,3],
    subo: {
        foo2:"bar2"
    }
};

//called with every property and its value
function process(key,value) {
    console.log(key + " : "+value);
}
function traverse(o,func) {
    for (var i in o) {
        func.apply(this,[i,o[i]]);  
        if (o[i] !== null && typeof(o[i])=="object") {
            //going one step down in the object tree!!
            traverse(o[i],func);
        }
    }
}
//that's all... no magic, no bloated framework
traverse(o,process);

JSON 对象只是一个 Javascript 对象。这实际上就是 JSON 的含义:JavaScript Object Notation。因此,您将遍历一个 JSON 对象,但是您通常会选择“遍历”一个 Javascript 对象。

在 ES2017 中,你会这样做:

Object.entries(jsonObj).forEach(([key, value]) => {
    // do something with key and val
});

您始终可以编写一个函数以递归方式下降到对象中:

function traverse(jsonObj) {
    if( jsonObj !== null && typeof jsonObj == "object" ) {
        Object.entries(jsonObj).forEach(([key, value]) => {
            // key is either an array index or object key
            traverse(value);
        });
    }
    else {
        // jsonObj is a number or string
    }
}

这应该是一个很好的起点。我强烈建议对此类事情使用现代 javascript 方法,因为它们使编写此类代码变得更加容易。

function traverse(o) {
    for (var i in o) {
        if (!!o[i] && typeof(o[i])=="object") {
            console.log(i, o[i]);
            traverse(o[i]);
        } else {
            console.log(i, o[i]);
        }
    }
}

有一个用于使用支持许多不同用例的 JavaScript 遍历 JSON 数据的新库。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>