使用递归在Json中生成树状结构

使用递归在Json中生成树状结构,json,recursion,tree,Json,Recursion,Tree,我正在努力想办法解决这个问题,我做了几次尝试,但都失败了 基本上,我在数据库中有一个员工列表,每个员工都有一个ID。一个员工可以有一个父员工称为经理 我需要以json格式以某种树的形式输出结构,如下面的URL所示 下面是一个非常基本的结构示例 JSON可以有如下结构,包含一个雇员数组: { "employees":[ { "id": 1764, "name": "Maaz", ... //other

我正在努力想办法解决这个问题,我做了几次尝试,但都失败了

基本上,我在数据库中有一个员工列表,每个员工都有一个ID。一个员工可以有一个父员工称为经理

我需要以json格式以某种树的形式输出结构,如下面的URL所示

下面是一个非常基本的结构示例

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大于的员工(如果存在)

添加员工时,请在不添加父字段的情况下进行添加,然后对其进行编辑。删除员工时,只需将其删除,最终断开的链接将在固定搜索时间找到