【问题标题】:Making a Tree like Structure in Json With Recursion使用递归在 Json 中制作树状结构
【发布时间】:2020-06-15 17:42:53
【问题描述】:

我正在努力解决这个问题,我已经尝试了几次,但都失败了。

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

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

https://raw.githubusercontent.com/bumbeishvili/Assets/master/Projects/D3/Organization%20Chart/redesignedChartLongData.json

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

【问题讨论】:

    标签: json recursion tree


    【解决方案1】:

    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
            }
        ]
    }
    

    "parent" 可以简单地是员工的可选字段,包含父员工的id

    如果 json 有递归(即"parent": { /*...*/ }),这会产生几个问题,例如:

    • 父员工是否仅作为二级存储,还是作为顶级出现在列表中?这增加了冗余或搜索复杂性。因为如果 1764 仅作为 1765 的子项出现,则您必须潜在地递归遍历整个列表树才能找到任何员工。
    • 递归的最大深度是多少?存在遍历问题。
    • 不一致或循环关系,导致循环。如果 A 是 B 的父级,B 是 A 的父级。或者如果存在冗余但删除后员工不会在任何地方被擦除。
    • 更复杂的操作:如果你有5个亲子员工的链条,去掉最上面的,剩下的怎么办?您必须定义一个策略。并且每次都调整树。

    另一方面,当您查找员工 1765 时,一个平面列表只需要 2 O(n) 次搜索。然后,您将找到其父 id 并再次在列表中搜索具有比 id 的员工,如果它存在。

    添加员工时,添加不带父字段并稍后编辑。当您删除员工时,只需将其删除,最终会在(固定)搜索时间找到断开的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-15
      • 2020-06-05
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 2012-10-22
      • 2018-08-08
      • 2015-02-14
      相关资源
      最近更新 更多