javascript - 将一个多维 JSON 数组转换为另一个
问题描述
我有以下输入对象
{
"id": 1,
"isLeaf": false,
"name": "New rule",
"pid": 0,
"dragDisabled": true,
"children": [
{
"id": "new1",
"value": "data1",
"then": false,
"type": "set",
"forEach": false,
"pid": 1
},
{
"id": "new2",
"value": "data2",
"then": true,
"type": "if",
"forEach": false,
"pid": 1,
"children": [
{
"id": "new3",
"type": "Then",
"enableElse": true,
"pid": "new2",
"children": [
{
"id": "new5",
"value": "data3",
"then": false,
"type": "fuzzy_search",
"forEach": false,
"pid": "new3"
}
]
},
{
"id": "new4",
"type": "Else",
"enableElse": true,
"pid": "new2",
"children": [
{
"id": "new6",
"value": "data4",
"then": false,
"type": "return",
"forEach": false,
"pid": "new4"
}
]
}
]
}
]
}
我需要将其转换为以下json
[
{
"id": "new1",
"condition": "data1"
},
{
"id": "new2",
"condition": "data2",
"then": [{
"id": "new5",
"condition": "data3"
}],
"else": [{
"id": "new6",
"condition": "data4"
}]
}
]
我必须递归地遍历输入 json 数组的所有现有内部子数组以制定输出。以下是该功能的部分实现代码。
ruleJSONFormatter = (request, parentItem, innerJSON) => {
try {
var outerObject = request;
if (outerObject.children && outerObject.children.length) {
var innerArray = outerObject.children;
// second iteration with inner children
innerArray.forEach((innerItem, index) => {
let parentObj = {};
let recursiveObj = {}; let thenArray = [];
recursiveObj['condition'] = innerItem.value && innerItem.value != undefined ? innerItem.value.formatedData : {};
recursiveObj['type'] = innerItem.type;
recursiveObj['id'] = innerItem.id;
recursiveObj['pid'] = innerItem.pid;
if (innerItem.children && innerItem.children != undefined && innerItem.children.length) {
switch (innerItem.type) {
case 'if':
recursiveObj['then'] = [];
recursiveObj['else'] = [];
}
if (Object.keys(parentObj).length == 0) {
parentObj = recursiveObj;
} else {
}
ruleJSONFormatter(innerItem, parentItem, parentObj)
} else {
if (Object.keys(parentObj).length == 0)
responseArray.push(innerJSON);
}
});
}
else {
console.log("No Values Inside the Formated Data ")
}
console.log("output-----------");
console.log(JSON.stringify(responseArray));
return responseArray
} catch (error) {
console.log('((((((((((((((((((((((((((', error)
}
}
最终输出数组有一个条件键,它绑定来自输入 json 的值键和 'then' 键,其中包含多个连续的内部子数组,这是类型 'if' 对象的成功条件。输出中的“else”键也是如此
我发现很难递归调用相同的函数来生成所需的输出。当子数组中有深层嵌套时会出现问题。感谢任何帮助。谢谢。
解决方案
推荐阅读
- elasticsearch - Elasticsearch 遵循 CAP 定理的哪些原则?
- google-analytics - 谷歌分析用户活动 API
- python - PDAL 过滤器不起作用:无法解析管道
- javascript - 如何从地图对象中删除具有对象键的对象?
- c# - 使用 Fluent API 在 EF Core 2.2 中避免使用 n 到 m 关系和父级的循环级联
- json - 在路由文件中定义类型
- sql-server - SQL 中两个临时列之间的百分比差异
- android - ARCore - 使用现有活动作为可渲染
- javascript - 如何将按钮变成下拉菜单?
- xpath - XPATH/Xquery 导航字符串序列