使用 JavaScript 遍历 JSON 对象树的所有节点
2022-08-30 01:53:55
我想遍历JSON对象树,但找不到任何库。这似乎并不困难,但感觉就像重新发明轮子一样。
在 XML 中,有很多教程展示了如何使用 DOM 遍历 XML 树:(
我想遍历JSON对象树,但找不到任何库。这似乎并不困难,但感觉就像重新发明轮子一样。
在 XML 中,有很多教程展示了如何使用 DOM 遍历 XML 树:(
如果你认为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方法来做这些事情,因为它们使编写这样的代码变得更加容易。