javascript - 来自JSON的分层JSON从顶点中的包装类列表转换而来

时间:2016-08-04 09:34:04

标签: javascript json visualforce apex

我通过序列化包装类列表获得了JSON:

{
"tree": [{
    "Id": "1",
    "Children": ["2", "3"]
}, {
    "Id": "2",
    "Children": []
}, {
    "Id": "3",
    "Children": []
}, {
    "Id": "4",
    "Children": ["1"]
}, {
    "Id": "5",
    "Children": ["4", "6"]
}, {
    "Id": "6",
    "Children": []
}]

}

我需要采用分层格式的格式化JSON:

{
"tree": [{
    "Id": "5",
    "Children": [{
        "Id": "4",
        "Children": [{
            "Id": "1",
            "Children": [{
                "Id": "2",
                "Children": []
            }, {
                "Id": "3",
                "Children": []
            }]
        }]
    }, {
        "Id": "6",
        "Children": []
    }]
}]

}

我需要获得这种JSON的层次结构形式,以便在visualforce页面上显示第n层的树结构。

1 个答案:

答案 0 :(得分:0)

这是此问题的解决方案,它将以分层格式格式化此JSON。

function convert(array)
{

var map = {}
for(var i = 0; i < array.length; i++)
{
    var obj = array[i]
    if(!(obj.Id in map))
    {
        map[obj.Id] = obj
        map[obj.Id].children = []
    }

    if(typeof map[obj.Id].parent == 'undefined')
    {
        map[obj.Id].Id = obj.Id
        map[obj.Id].parent= obj.parent
    }

    var parent = obj.parent || ' ';
    if(!(parent in map))
    {
        map[parent] = {}
        map[parent].children = []
    }

    map[parent].children.push(map[obj.Id])
}
return map[' ']
}