json - 打字稿中的 JSON 转换
问题描述
我是这类东西的新手。我有更大的 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]);
});
}
}
解决方案
你很接近,但你需要确保从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])) };
}
}
您可以根据需要调整名称的处理方式。
推荐阅读
- javascript - 重定向时移相器页面变为空白,但如果直接导航则有效
- javascript - 为用 TypeScript 编写的 React 组件生成 PropTypes
- javascript - 无法使用语言环境 en 解析月份三个字母月份
- c++ - 如何加速此代码(MWE!),例如使用限制
- django - 当 Debug=False 时 Django Heroku 不提供静态文件
- apache-spark - 使用 Spark 运行 SQL 查询
- cucumber - 空手道 - 在单一场景中有多个“何时”
- angular - 在 Angular 中找不到项目名称
- javascript - 将图像添加到真棒完成的下拉自动完成中,提交按钮然后向下移动,重置其位置?
- python - 如果命名元组是不可变的,为什么它有一个 _replace 方法?