javascript - 如何到达 json 嵌套的最后一层并动态格式化输出?
问题描述
我有这个json:
[
{
"name": "MARVEL",
"superheroes": "yes"
},
{
"name": "Big Bang Theroy",
"superheroes": "NO",
"children": [
{
"name": "Sheldon",
"superheroes": "NO"
}
]
},
{
"name": "dragon ball",
"superheroes": "YES",
"children": [
{
"name": "goku",
"superheroes": "yes",
"children": [
{
"name": "gohan",
"superheroes": "YES"
}
]
}
]
}
]
我知道如何循环并通过它,但我需要这样的输出:
[
{
"name": "MARVEL",
"answer": [
{
"there_are_superheroes": "YES"
}
]
},
{
"name": "Big Bang Theroy",
"answer": [
{
"there_are_superheroes": "NO",
"new_leaft": [
{
"name": "sheldon",
"there_are_superheroes": "NO"
}
]
}
]
},
{
"name": "dragon ball",
"answer": [
{
"there_are_superheroes": "YES",
"new_leaft": [
{
"name": "goku",
"answer": [
{
"there_are_superheroes": "YES",
"new_leaft": [
{
"name": "gohan",
"answer": [
{
"there_are_superheroes": "YES"
}
]
}
]
}
]
}
]
}
]
}
]
我试过这样的事情:
format(d) {
if (d.children) {
d.children.forEach((d) => {
format;
});
}
}
format(data);
我不知道如何获得我想要的结构。foreach
我曾尝试children
使用. 在我的真实项目中,我从 Web 服务中获得了一个结构,我需要像这样构建它。n
children
名为的属性superheroes
我希望它显示在一个名为的数组answer
中,并且在其中,there_are_superheroes
它将具有它的值。
"name": "MARVEL",
"answer": [
{
"there_are_superheroes": "YES", --> `there_are_superheroes` was `superheroes`,
"new_leaft": [
{
.
.
并且new_leaft
相当于children
正如我所说,我知道如何遍历对象和数组,但在这种情况下,我不知道如何遍历children nested
每个对象的最后一个。
解决方案
这是如何进行一级递归:
function format(l){
const result = {name: l.name};
result.answer = [{there_are_superheroes: l.superheroes}];
result.answer[0].new_leaft = l.children;
return result;
}
format({
"name": "Big Bang Theroy",
"superheroes": "NO",
"children": [
{
"name": "Sheldon",
"superheroes": "NO"
}
]
})
// result:
{
"name": "Big Bang Theroy",
"answer": [
{
"there_are_superheroes": "NO",
"new_leaft": [
{
"name": "Sheldon",
"superheroes": "NO"
}
]
}
]
}
如果可能的键列表是固定的,那就很简单了。否则用于Object.assign
复制所有键(或仅遍历这些键),然后修改必要的键。
现在你必须弄清楚在哪里放置递归调用(提示:l.children.map(format)
,是否应该命名键tree
或者new_leaf(t)
,检查该字段是否存在并相应地处理,(参见问题在 Javascript。我如何判断一个字段是否存在于对象? - 堆栈溢出)等。
推荐阅读
- c++ - 无法找到数组值的最小值和最大值 - C++
- node.js - 不能要求剧作家
- java - Hibernate 生成无效查询
- reactjs - React-Redux Hooks,将 inputValue 设置为空后,不会在 antD Input 中重新渲染
- docker - 在 docker-compose 中使用芹菜花和 auth
- python - 如何只打印一行重复数据中的一列?
- amazon-web-services - 有没有办法使用 CLI 或 GUI 一次性删除多个 AWS IAM 客户托管策略?
- python - 如何修复我在普通 SQLAlchemy 和 Flask-SQLAlchemy 中使用相同模型的方法?
- python - 张量 a (707) 的大小必须与非单维 1 处的张量 b (512) 的大小相匹配
- objective-c - iOS 14 AVPlayer 不显示视频,但播放声音