遍历 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 数据的新库。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习