使用递归在Json中生成树状结构
我正在努力想办法解决这个问题,我做了几次尝试,但都失败了 基本上,我在数据库中有一个员工列表,每个员工都有一个ID。一个员工可以有一个父员工称为经理 我需要以json格式以某种树的形式输出结构,如下面的URL所示 下面是一个非常基本的结构示例使用递归在Json中生成树状结构,json,recursion,tree,Json,Recursion,Tree,我正在努力想办法解决这个问题,我做了几次尝试,但都失败了 基本上,我在数据库中有一个员工列表,每个员工都有一个ID。一个员工可以有一个父员工称为经理 我需要以json格式以某种树的形式输出结构,如下面的URL所示 下面是一个非常基本的结构示例 JSON可以有如下结构,包含一个雇员数组: { "employees":[ { "id": 1764, "name": "Maaz", ... //other
JSON可以有如下结构,包含一个雇员数组:
{
"employees":[
{
"id": 1764,
"name": "Maaz",
... //other fields... this employee has no parent field or
// "parent" : 0 (invalid value)
},
{
"id": 1765,
"parent": 1764,
//other fields... this employee has Maaz as parent
}
]
}
父项可以是雇员的可选字段,包含父项雇员的ID
如果json有一个递归,即父:{/*…*/},这将产生几个问题,例如:
父员工将仅存储为第二级,还是也将作为顶级显示在列表中?这增加了冗余或搜索复杂性。因为如果1764仅显示为1765的子级,则必须潜在地递归遍历整个列表树才能找到任何员工。
递归的最大深度是多少?与特拉斯维尔的问题。
不一致或循环关系,导致循环。如果A是B的父级,B是A的父级,或者如果存在冗余,但在删除时,员工不会在任何地方被删除。
更复杂的操作:如果你有一个由5名父子员工组成的链条,并且去掉了最上面的一名,那么剩下的怎么办?您必须定义一个策略。每次都要调整树。
另一方面,当你在寻找雇员1765时,一个简单的列表只需要2次搜索。然后,您将找到其父id,并在列表中再次搜索id大于的员工(如果存在)
添加员工时,请在不添加父字段的情况下进行添加,然后对其进行编辑。删除员工时,只需将其删除,最终断开的链接将在固定搜索时间找到