首页 > 解决方案 > 将一个多维 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”键也是如此

我发现很难递归调用相同的函数来生成所需的输出。当子数组中有深层嵌套时会出现问题。感谢任何帮助。谢谢。

标签: javascriptarraysnode.jsjson

解决方案


推荐阅读