使用javascript/jquery从平面json创建嵌套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
[{"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]);
}
}
}