📜  父子到 json 树 python - Javascript (1)

📅  最后修改于: 2023-12-03 15:40:49.277000             🧑  作者: Mango

父子到 JSON 树 Python-JavaScript

在开发过程中,我们经常需要将父子关系的数据转换为 JSON 树,以满足后续业务需求。本文将介绍如何使用 Python 和 JavaScript 将父子关系的数据转换为 JSON 树。

Python
概述

在 Python 中,我们可以使用递归函数将父子关系的数据转换为 JSON 树。

代码
# 父节点 ID 所在的索引位置
PARENT_ID_INDEX = 1

def build_tree(data, root_id=None):
    """
    将父子关系的数据转换为 JSON 树
    :param data: 父子关系的数据,二维数组形式
    :param root_id: 根节点 ID
    :return: JSON 树
    """
    tree = []
    for row in data:
        if row[PARENT_ID_INDEX] == root_id:
            node = {
                'id': row[0],
                'name': row[2],
                'children': build_tree(data, row[0])
            }
            tree.append(node)
    return tree
说明
  • build_tree 接收两个参数:dataroot_iddata 是父子关系的数据,二维数组形式;root_id 是根节点 ID,如果不传,默认为 None
  • tree 是 JSON 树,初始为空数组。
  • 遍历 data 中每一行数据,如果当前行数据的父节点 ID 等于 root_id,则表示当前行数据是当前节点的子节点,构建一个节点对象,并递归调用 build_tree 方法,将当前节点的 ID 作为 root_id 参数,继续构建当前节点的子节点,最后将当前节点添加到 tree 数组中。
  • 递归结束条件为:当前行数据的父节点 ID 不等于 root_id。在这种情况下,不会创建新的子节点。
示例

假设我们有以下父子关系的数据:

[
    [1, None, 'A'],
    [2, 1, 'B'],
    [3, 2, 'C'],
    [4, 2, 'D'],
    [5, 1, 'E'],
    [6, 3, 'F'],
    [7, 3, 'G']
]

执行以下代码:

data = [
    [1, None, 'A'],
    [2, 1, 'B'],
    [3, 2, 'C'],
    [4, 2, 'D'],
    [5, 1, 'E'],
    [6, 3, 'F'],
    [7, 3, 'G']
]

tree = build_tree(data)

print(tree)

输出结果:

[
    {
        "id": 1,
        "name": "A",
        "children": [
            {
                "id": 2,
                "name": "B",
                "children": [
                    {
                        "id": 3,
                        "name": "C",
                        "children": [
                            {
                                "id": 6,
                                "name": "F",
                                "children": []
                            },
                            {
                                "id": 7,
                                "name": "G",
                                "children": []
                            }
                        ]
                    },
                    {
                        "id": 4,
                        "name": "D",
                        "children": []
                    }
                ]
            },
            {
                "id": 5,
                "name": "E",
                "children": []
            }
        ]
    }
]

最终,我们得到了一个 JSON 树对象。

JavaScript
概述

在 JavaScript 中,我们同样可以使用递归函数将父子关系的数据转换为 JSON 树。

代码
// 父节点 ID 所在的索引位置
const PARENT_ID_INDEX = 1;

function buildTree(data, rootId = null) {
  /*
  将父子关系的数据转换为 JSON 树
  - data: 父子关系的数据,数组形式
  - rootId: 根节点 ID
  */
  const tree = [];
  data.forEach((row) => {
    if (row[PARENT_ID_INDEX] === rootId) {
      const node = {
        id: row[0],
        name: row[2],
        children: buildTree(data, row[0]),
      };
      tree.push(node);
    }
  });
  return tree;
}
说明
  • buildTree 接收两个参数:datarootIddata 是父子关系的数据,数组形式;rootId 是根节点 ID,如果不传,默认为 null
  • tree 是 JSON 树,初始为空数组。
  • 遍历 data 原数组,如果当前行数据的父节点 ID 等于 rootId,则表示当前行数据是当前节点的子节点,构建一个节点对象,并递归调用 buildTree 方法,将当前节点的 ID 作为 rootId 参数,继续构建当前节点的子节点,最后将当前节点添加到 tree 数组中。
  • 递归结束条件为:当前行数据的父节点 ID 不等于 rootId。在这种情况下,不会创建新的子节点。
示例

假设我们有以下父子关系的数据:

[
  [1, null, "A"],
  [2, 1, "B"],
  [3, 2, "C"],
  [4, 2, "D"],
  [5, 1, "E"],
  [6, 3, "F"],
  [7, 3, "G"],
];

执行以下代码:

const data = [
  [1, null, "A"],
  [2, 1, "B"],
  [3, 2, "C"],
  [4, 2, "D"],
  [5, 1, "E"],
  [6, 3, "F"],
  [7, 3, "G"],
];

const tree = buildTree(data);

console.log(tree);

输出结果:

[
  {
    id: 1,
    name: "A",
    children: [
      {
        id: 2,
        name: "B",
        children: [
          {
            id: 3,
            name: "C",
            children: [
              {
                id: 6,
                name: "F",
                children: [],
              },
              {
                id: 7,
                name: "G",
                children: [],
              },
            ],
          },
          {
            id: 4,
            name: "D",
            children: [],
          },
        ],
      },
      {
        id: 5,
        name: "E",
        children: [],
      },
    ],
  },
];

最终,我们得到了一个 JSON 树对象。

总结

以上是如何使用 Python 和 JavaScript 将父子关系的数据转换为 JSON 树的详细介绍。这里我们使用了递归函数实现,代码简洁易懂,灵活易用,希望对你的开发工作有所帮助。