我是这类新手。我有这样更大的JSON:
{ "X": {
"child1": {
"k1": [],
"k2": "12",
"k3": "abc"
},
"ver": {
"dev1": {
"key1": "0x0100"
},
"dev2": {
"key1": "0x0003",
"key2": "0x0300"
},
"dev3": {
"key1": "0x990",
"key3": "0x0400",
"key2": "0x0100"
}}}}
由于我需要使用角树组件,因此需要将上面的格式转换为类似这样的格式:
{name:X, children: [{name: child1, children: [{name: k1, children: [{name: []}]}]....
我的问题是如何遍历整个json进行此转换?应该可以通过递归来实现,但是我从未尝试过。
我尝试递归:
recursive(obj) {
if (obj instanceof String) {
return {name: obj};
} else if (obj instanceof Array) {
const arr = [];
obj.forEach(item => {
arr.push({name: item})
return arr;
});
} else {
Object.keys(item => {
return this.recursive(obj[item]);
});
}
}
答案 0 :(得分:1)
您已经接近了,但是您需要确保从recursive
函数的每种情况返回一些内容。从回调返回值不会从主函数返回。另外,Object.keys
仅返回键数组;如果要遍历它们,则必须单独进行。这是我建议的解决方案:
recursive(name, obj) {
if (typeof obj === "string") {
return { name: name + ": " + obj };
} else if (obj instanceof Array) {
return { name: name, children: obj.map(item => this.recursive("", item)) };
} else {
return { name: name, children: Object.keys(obj).map(k => this.recursive(k, obj[k])) };
}
}
您可以根据需要调整名称的处理方式。