📅  最后修改于: 2023-12-03 15:40:49.277000             🧑  作者: Mango
在开发过程中,我们经常需要将父子关系的数据转换为 JSON 树,以满足后续业务需求。本文将介绍如何使用 Python 和 JavaScript 将父子关系的数据转换为 JSON 树。
在 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
接收两个参数:data
和 root_id
。data
是父子关系的数据,二维数组形式;root_id
是根节点 ID,如果不传,默认为 None
。tree
是 JSON 树,初始为空数组。data
中每一行数据,如果当前行数据的父节点 ID 等于 root_id
,则表示当前行数据是当前节点的子节点,构建一个节点对象,并递归调用 build_tree
方法,将当前节点的 ID 作为 root_id
参数,继续构建当前节点的子节点,最后将当前节点添加到 tree
数组中。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 中,我们同样可以使用递归函数将父子关系的数据转换为 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
接收两个参数:data
和 rootId
。data
是父子关系的数据,数组形式;rootId
是根节点 ID,如果不传,默认为 null
。tree
是 JSON 树,初始为空数组。data
原数组,如果当前行数据的父节点 ID 等于 rootId
,则表示当前行数据是当前节点的子节点,构建一个节点对象,并递归调用 buildTree
方法,将当前节点的 ID 作为 rootId
参数,继续构建当前节点的子节点,最后将当前节点添加到 tree
数组中。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 树的详细介绍。这里我们使用了递归函数实现,代码简洁易懂,灵活易用,希望对你的开发工作有所帮助。