将JSON从一种格式转换为另一种格式

Convert JSON from one format to other

本文关键字:格式 一种 转换 另一种 JSON      更新时间:2023-09-26

我正在尝试将下面的JSON转换为另一种格式,其中重用JSON不包含valueChainEntity对象名称,并且我还想删除输入输出数组。请注意,该结构是父子关系,输入和输出数组可以出现在任何级别的items数组中。即使在所有级别(但仅在项目阵列内部)

var inputJSON = [  
    {  
        "valueChainEntity":{  
            "id":308,
            "valueChainEntityId":48,
            "items":[  
                {  
                    "valueChainEntity":{  
                        "id":309,
                        "valueChainEntityId":49,
                        "items":[  
                            {  
                                "valueChainEntity":{  
                                    "id":312,
                                    "valueChainEntityId":50,
                                    "items":[  
                                    ]
                                },
                                "inputs":[  
                                    {  
                                        "id":312,
                                        "valueChainEntityId":50,
                                        "items":[  
                                        ]
                                    }
                                ],
                                "outputs":[  
                                    {  
                                        "id":313,
                                        "valueChainEntityId":50
                                    }
                                ]
                            }
                        ]
                    }
                }
            ]
        }
    }
]
var outputJSON=  [
    {  
        "id":308,
        "valueChainEntityId":48,
        "items":[  
            {  
                "id":309,
                "valueChainEntityId":49,
                "items":[  
                    {  
                        "id":312,
                        "valueChainEntityId":50,
                        "items":[  
                        ]
                    }
                ]
            }
        ]
    }
]

我的代码:

 inputJSON.forEach((item) => {
                    return item.valueChainEntity;
                });
//which will traverse only through the first level and will not delete the **inputs** and **outputs** array..

查看以下是否有效:

function parseInputJSON(inp) {
        return inp.map(function (item) {
            return getValueChainEntity(item);
        });
    }
function getValueChainEntity(item) {
  if (item['valueChainEntity'] != undefined) {
    var valueChainEntity = item.valueChainEntity;
    valueChainEntity.items = parseInputJSON(valueChainEntity.items);
    return valueChainEntity;
  }
  return item;
}
var inputJSON=[
    {
        "valueChainEntity": {
            "id": 308,
            "valueChainEntityId": 48,
            "items": [
                {
                    "valueChainEntity": {
                        "id": 309,
                        "valueChainEntityId": 49,
                        "items": [
                            {
                                "valueChainEntity": {
                                    "id": 312,
                                    "valueChainEntityId": 50,
                                    "items": []
                                },
                                "inputs": [
                                    {
                                        "id": 312,
                                        "valueChainEntityId": 50,
                                        "items": []
                                    }
                                ],
                                "outputs": [
                                    {
                                        "id": 313,
                                        "valueChainEntityId": 50
                                    }
                                ]
                            }
                        ]
                    }
                }
            ]
    }
}];
var newInput = parseInputJSON(inputJSON);
document.getElementById("json").innerHTML = JSON.stringify(newInput, undefined, 4);
<pre id="json"></pre>

这是另一种工作方式。。

样本代码

    function populateChildrenRecursively(outputTypeId, valueChainEntities, parentValueChainEntity) {
        for (var i = 0; i < valueChainEntities.length; i++) {
            if (valueChainEntities[i].valueChainEntity.valueChainEntityId != parentValueChainEntity.valueChainEntity.valueChainEntityId && hasInput(outputTypeId, valueChainEntities[i].inputs)) {
                parentValueChainEntity.valueChainEntity.items.push(valueChainEntities[i]);
                if (valueChainEntities[i].outputs.length > 0) {
                    valueChainEntities[i].valueChainEntity.items = [];
                    for (var j = 0; j < valueChainEntities[i].outputs.length; j++) {
                        populateChildrenRecursively(valueChainEntities[i].outputs[j].outputTypeId, valueChainEntities, valueChainEntities[i]);
                    }
                }
            }
        }
    }

https://plnkr.co/edit/d2wtXcaU37quthBjgrCu?p=preview