JSON摘录:
{
"a": {
"b1" : {
"c1" : {
"d1" : "D1",
"d2" : "D2",
"d3" : "D3"
},
"c2" : {
"d4" : "D4",
"d5" : "D5"
}
},
"b2" : {
"c3" : {
"d6" : D6
}
}
}
}
我想迭代JSON树并获得一个' d'系列值与每个' d'的导航路径节点,例如
[{'name': 'd1', 'value': 'D1', 'path': ['a', 'b1', 'c1']},...]
在这里,我写了一个函数如下:
function GetParameters(obj) {
for (var sProp in obj) {
if(typeof(obj[sProp]) == "string") {
parameters.push({'name':sProp,'value':obj[sProp]})
} else {
GetParameters(obj[sProp]);
}
}
}
此功能仅生成'名称'和'价值'每个部分都有' d'记录,但我怎样才能获得路径'部分完成这个功能?
欢迎任何变通方法。谢谢!
答案 0 :(得分:1)
您可以使用迭代和递归方法为下一次递归提供实际路径。
如果找到了结束节点,则会将新对象推送到具有受访节点的结果数组。
function getPath(object) {
function iter(o, path) {
Object.keys(o).forEach(function (k) {
if (typeof o[k] === 'object') {
return iter(o[k], path.concat(k));
}
result.push({ name: k, value: o[k], path: path });
});
}
var result = [];
iter(object, []);
return result;
}
var data = { "a": { "b1": { "c1": { "d1": "D1", "d2": "D2", "d3": "D3" }, "c2": { "d4": "D4", "d5": "D5" } }, "b2": { "c3": { "d6": "D6" } } } };
console.log(getPath(data));