使用javascript/jquery从平面json创建嵌套json

使用javascript/jquery从平面json创建嵌套json,javascript,jquery,json,Javascript,Jquery,Json,我当前的json(我创建它是为了生成树结构)如下所示: [{"text":"glossary","id":"599","parentid":"-1"}, {"text":"title","id":"600","parentid":"599"}, {"text":"","id":"601","parentid":"600"}, {"text":"GlossDiv","id":"602","parentid":"599"}, {"text":"GlossList","id":"603","paren

我当前的json(我创建它是为了生成树结构)如下所示:

[{"text":"glossary","id":"599","parentid":"-1"},
{"text":"title","id":"600","parentid":"599"},
{"text":"","id":"601","parentid":"600"},
{"text":"GlossDiv","id":"602","parentid":"599"},
{"text":"GlossList","id":"603","parentid":"602"},
{"text":"GlossEntry","id":"604","parentid":"603"},
{"text":"GlossTerm","id":"605","parentid":"604"},
{"text":"Standard Generalized Markup Language","id":"606","parentid":"605"},
{"text":"GlossSee","id":"607","parentid":"604"},
{"text":"markup","id":"608","parentid":"607"},
{"text":"SortAs","id":"609","parentid":"604"},
{"text":"SGML","id":"610","parentid":"609"},
{"text":"GlossDef","id":"611","parentid":"604"},
{"text":"para","id":"612","parentid":"611"},
{"text":"","id":"613","parentid":"612"},
{"text":"GlossSeeAlso","id":"614","parentid":"611"},
{"text":"","id":"615","parentid":"614"},
{"text":"XML","id":"616","parentid":"614"},
{"text":"ID","id":"617","parentid":"604"},
{"text":"SGML","id":"618","parentid":"617"},
{"text":"Acronym","id":"619","parentid":"604"},
{"text":"SGML","id":"620","parentid":"619"},
{"text":"Abbrev","id":"621","parentid":"604"},
{"text":"ISO 8879:1986","id":"622","parentid":"621"},
{"text":"title","id":"623","parentid":"602"},
{"text":"","id":"624","parentid":"623"}]`

如何在Javascript中为上述数组生成嵌套json?

您可以创建一个查找字典,保存父项,并在迭代所有条目时引用它们

var dictionary = {};
for (var i = 0; i < data.length; i++) {
    dictionary[data[i].id] = data[i];
}
for (var i = 0; i < data.length; i++) {
    if (data[i].parentid) {
        var parent = dictionary[data[i].parentid];
        if (parent) {
            if (!parent.children) {
                parent.children = [];
            }
            parent.children.push(data[i]);
        }
    }
}
但这一切都取决于你打算如何处理结果。这个问题目前还不明确

注意:上述对
数据的双重迭代
允许父母出现在孩子之后(可能是这样,也可能不是这样)。如果父对象总是首先出现,则可以将逻辑组合成一个循环

e、 g

var字典={};
对于(变量i=0;i
以什么格式嵌套?你追求的最终结果是什么?如果我们不知道您打算用它做什么,那么“嵌套”是相当模糊的:)请同时解释所需的输出格式,你应该发布你已经尝试过的代码,这样我们就知道我们不会复制你已经做过的任何事情。我正在从服务器端发送一个json,其中包含一些空值,用户将填充并重新发送json。我创建的树结构包含空值的文本框。单击“提交”返回完整的jsonIn在这种情况下,树“编辑”页面的示例会很有帮助(输出从浏览器保存的HTML,而不是源代码)。我宁愿不去模仿另一个不符合确切目的的例子:)这太棒了!如果您添加了一个键,指定在根级和嵌套子级中构建嵌套对象的顺序,这将如何改变?@YanivWainer假设索引位于数据元素中,在填充树后对每个级别进行排序。这对我帮助很大!!!谢谢
[{
    "text": "glossary",
    "id": "599",
    "parentid": "-1",
    "children": [{
        "text": "title",
        "id": "600",
        "parentid": "599",
        "children": [{
            "text": "",
            "id": "601",
            "parentid": "600"
        }]
    }, {
        "text": "GlossDiv",
        "id": "602",
        "parentid": "599",
        "children": [{
            "text": "GlossList",
            "id": "603",
            "parentid": "602",
            "children": [{
                "text": "GlossEntry",
                "id": "604",
                "parentid": "603",
                "children": [{
                    "text": "GlossTerm",
                    "id": "605",
                    "parentid": "604",
                    "children": [{
                        "text": "Standard Generalized Markup Language",
                        "id": "606",
                        "parentid": "605"
                    }]
                }, {
                    "text": "GlossSee",
                    "id": "607",
                    "parentid": "604",
                    "children": [{
                        "text": "markup",
                        "id": "608",
                        "parentid": "607"
                    }]
                }, {
                    "text": "SortAs",
                    "id": "609",
                    "parentid": "604",
                    "children": [{
                        "text": "SGML",
                        "id": "610",
                        "parentid": "609"
                    }]
                }, {
                    "text": "GlossDef",
                    "id": "611",
                    "parentid": "604",
                    "children": [{
                        "text": "para",
                        "id": "612",
                        "parentid": "611",
                        "children": [{
                            "text": "",
                            "id": "613",
                            "parentid": "612"
                        }]
                    }, {
                        "text": "GlossSeeAlso",
                        "id": "614",
                        "parentid": "611",
                        "children": [{
                            "text": "",
                            "id": "615",
                            "parentid": "614"
                        }, {
                            "text": "XML",
                            "id": "616",
                            "parentid": "614"
                        }]
                    }]
                }, {
                    "text": "ID",
                    "id": "617",
                    "parentid": "604",
                    "children": [{
                        "text": "SGML",
                        "id": "618",
                        "parentid": "617"
                    }]
                }, {
                    "text": "Acronym",
                    "id": "619",
                    "parentid": "604",
                    "children": [{
                        "text": "SGML",
                        "id": "620",
                        "parentid": "619"
                    }]
                }, {
                    "text": "Abbrev",
                    "id": "621",
                    "parentid": "604",
                    "children": [{
                        "text": "ISO 8879:1986",
                        "id": "622",
                        "parentid": "621"
                    }]
                }]
            }]
        }, {
            "text": "title",
            "id": "623",
            "parentid": "602",
            "children": [{
                "text": "",
                "id": "624",
                "parentid": "623"
            }]
        }]
    }]
}, {
    "text": "title",
    "id": "600",
    "parentid": "599",
    "children": [{
        "text": "",
        "id": "601",
        "parentid...rkup",
        "id": "608",
        "parentid": "607"
    }]
}, {
    "text": "markup",
    "id": "608",
    "parentid": "607"
}, {
    "text": "SortAs",
    "id": "609",
    "parentid": "604",
    "children": [{
        "text": "SGML",
        "id": "610",
        "parentid": "609"
    }]
}, {
    "text": "SGML",
    "id": "610",
    "parentid": "609"
}, {
    "text": "GlossDef",
    "id": "611",
    "parentid": "604",
    "children": [{
        "text": "para",
        "id": "612",
        "parentid": "611",
        "children": [{
            "text": "",
            "id": "613",
            "parentid": "612"
        }]
    }, {
        "text": "GlossSeeAlso",
        "id": "614",
        "parentid": "611",
        "children": [{
            "text": "",
            "id": "615",
            "parentid": "614"
        }, {
            "text": "XML",
            "id": "616",
            "parentid": "614"
        }]
    }]
}, {
    "text": "para",
    "id": "612",
    "parentid": "611",
    "children": [{
        "text": "",
        "id": "613",
        "parentid": "612"
    }]
}, {
    "text": "",
    "id": "613",
    "parentid": "612"
}, {
    "text": "GlossSeeAlso",
    "id": "614",
    "parentid": "611",
    "children": [{
        "text": "",
        "id": "615",
        "parentid": "614"
    }, {
        "text": "XML",
        "id": "616",
        "parentid": "614"
    }]
}, {
    "text": "",
    "id": "615",
    "parentid": "614"
}, {
    "text": "XML",
    "id": "616",
    "parentid": "614"
}, {
    "text": "ID",
    "id": "617",
    "parentid": "604",
    "children": [{
        "text": "SGML",
        "id": "618",
        "parentid": "617"
    }]
}, {
    "text": "SGML",
    "id": "618",
    "parentid": "617"
}, {
    "text": "Acronym",
    "id": "619",
    "parentid": "604",
    "children": [{
        "text": "SGML",
        "id": "620",
        "parentid": "619"
    }]
}, {
    "text": "SGML",
    "id": "620",
    "parentid": "619"
}, {
    "text": "Abbrev",
    "id": "621",
    "parentid": "604",
    "children": [{
        "text": "ISO 8879:1986",
        "id": "622",
        "parentid": "621"
    }]
}, {
    "text": "ISO 8879:1986",
    "id": "622",
    "parentid": "621"
}, {
    "text": "title",
    "id": "623",
    "parentid": "602",
    "children": [{
        "text": "",
        "id": "624",
        "parentid": "623"
    }]
}, {
    "text": "",
    "id": "624",
    "parentid": "623"
}]
var dictionary = {};
for (var i = 0; i < data.length; i++) {
    dictionary[data[i].id] = data[i];
    if (data[i].parentid) {
        var parent = dictionary[data[i].parentid];
        if (parent) {
            if (!parent.children) {
                parent.children = [];
            }
            parent.children.push(data[i]);
        }
    }
}