gpt4 book ai didi

javascript - 从平面 json 生成(多级)flare.json 数据格式

转载 作者:IT老高 更新时间:2023-10-28 12:55:54 25 4
gpt4 key购买 nike

我有一个扁平的 json 文件结构,例如:

[
{ "name" : "ABC", "parent":"DEF", "relation": "ghi", "depth": 1 },
{ "name" : "DEF", "parent":"null", "relation": "null", "depth": 0 },
{ "name" : "new_name", "parent":"ABC", "relation": "rel", "depth": 2 }
....
....
]

我想要的是一个嵌套的文件结构,例如:

[ 
{
"name": "DEF",
"parent": "null",
"relation": "null",
"children": [
{ "name": "ABC",
"parent": "DEF",
"relation": "ghi",
"children": [
"name": "new_name",
...
"children": []
]
}
]
}
]

它应该进入多少层没有限制。我目前的最大值是 30。一个节点可以拥有的子节点数量没有限制。例如。根节点将剩余的所有节点作为其子节点。

到目前为止我尝试了什么?

数据的来源是我通过 python 获取和解析的 MS SQL Server 数据库。请帮忙!在过去的两周里,我一直被困在这个问题上。

谢谢

最佳答案

这里有一个实现,在 Javascript 中:http://jsfiddle.net/9FqKS/

您首先创建一个基于名称的 map 以便于查找。有几种不同的方法可以做到这一点 - 在这种情况下,我使用 .reduce 方法,该方法从一个空对象开始并遍历 data 数组,添加一个每个节点的条目:

// create a {name: node} map
var dataMap = data.reduce(function(map, node) {
map[node.name] = node;
return map;
}, {});

这相当于:

var dataMap = {};
data.forEach(function(node) {
dataMap[node.name] = node;
});

(我有时认为reduce更优雅。)然后迭代地将每个 child 添加到其 parent ,或者如果没有找到 parent ,则将其添加到根数组:

// create the tree array
var tree = [];
data.forEach(function(node) {
// find parent
var parent = dataMap[node.parent];
if (parent) {
// create child array if it doesn't exist
(parent.children || (parent.children = []))
// add node to parent's child array
.push(node);
} else {
// parent is null or missing
tree.push(node);
}
});

除非你的树很大,否则我认为这应该不会太昂贵,所以你应该能够在客户端完成它(如果你不能,你可能有太多数据无法轻松显示任何情况下)。

关于javascript - 从平面 json 生成(多级)flare.json 数据格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17847131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com