创建父子树JSON

时间:2017-12-09 13:01:32

标签: javascript java php python json

我有一个包含moduleId和parentId的JSON数据,我想要一个带有模块父子映射结构的新JSON。

** parentId可以为null,表示该模块没有父级。

当前JSON -

[{
    "moduleId": 1,
    "parentId": null    
 },
 {
    "moduleId": 2,
    "parentId": 1   
 },
 {
    "moduleId": 3,
    "parentId": 1   
 },
 {
    "moduleId": 4,
    "parentId": null    
 },
 {
    "moduleId": 5,
    "parentId": null    
 },
 {
    "moduleId": 6,
    "parentId": 3   
 }
]

必需的JSON -

[{
    "moduleId": 1,
    "child": [{
                "moduleId": 2,
                "child": []
              },
              {
                "moduleId": 3,
                "child":[{
                            "moduleId": 6,
                            "child": []
                        }]
              }]    
 },
 {
    "moduleId": 4,
    "child": []
 },
 {
    "moduleId": 5,
    "child": []
 }
]

当前代码

问题 - 儿童内部的孩子没有被映射

function tree($list)
{
    $map = new stdClass();
    $roots = [];$node = [];

    for($i=0; $i<sizeof($list); $i++)
    {
        $c=$list[$i]["moduleId"];
        $map->$c = $i; 

        $list[$i]["children"] = []; // initialize the children
    }

    for($i=0; $i<sizeof($list); $i++)
    {
        $node = $list[$i];
        if( $node["parentId"] !== "" )
        {
            $m = $node["parentId"];
            $val = $map->$m;

            $child = new StdClass;
            $child->moduleId = $node["moduleId"];
            $child->parentId = $node["parentId"];
            $child->children = [];

            array_push($list[$val]["children"],$node);

        }
    }

for($i = 0;$i<sizeof($list);$i++)
    {
        if($list[$i]["parentId"] == "")
        {
            array_push($roots, $list[$i]);
        }
    }
    return json_encode($roots);
}

我无法弄明白。这里的所有答案都给出了不同的结果。 可以使用任何语言(java,C,php,js,python等)。三江源。

1 个答案:

答案 0 :(得分:1)

var arry = [{
    "parentId": null,
    "moduleId": 1

 },
 {
    "parentId": 1,
    "moduleId": 2

 },
 {
    "parentId": 1,

    "moduleId": 3

 },
 {
    "parentId": null,
    "moduleId": 4

 },
 {
    "parentId": null,
    "moduleId": 5   
 },
 {

    "parentId": 3, 
    "moduleId": 6 
 }
];

function convert(array){
    var map = {};
    for(var i = 0; i < array.length; i++){
        var obj = array[i];
        obj.children= [];

        map[obj.moduleId] = obj;

        var parent = obj.parentId || '-';
        if(!map[parent]){
            map[parent] = {
                children: []
            };
        }
        map[parent].children.push(obj);
    }
    return map['-'].children;
}

var r = convert(arry)
console.log('array', r);
console.log('result', JSON.stringify(r))