如何在Python中从List或Dataframe生成Treeview JSON?
Python实现列表转Bootstrap TreeView嵌套JSON
实现思路
我们需要将扁平的三层结构数据(标题-章节-小节+链接)转换为嵌套树形结构,核心是逐层构建节点并避免重复创建父节点:
- 用字典存储已创建的顶级节点,通过文本快速定位,避免低效遍历查找
- 依次处理每一行数据,逐层检查父节点是否存在,不存在则创建
- 最终将字典中的顶级节点转换为列表,再序列化为格式化的JSON
代码实现
处理原始列表数据
import json # 原始输入数据 data = [ ['title1','title1_chapter1','title1_chapter1_section1','title1_chapter1_href1'], ['title1','title1_chapter1','title1_chapter1_section2','title1_chapter1_href2'], ['title1','title1_chapter2','title1_chapter2_section1','title1_chapter2_href1'], ['title1','title1_chapter2','title1_chapter2_section2','title1_chapter2_href2'], ['title2','title2_chapter1','title2_chapter1_section1','title2_chapter1_href1'] ] # 初始化顶级节点存储字典 root = {} for item in data: level1_text, level2_text, level3_text, href = item # 创建/获取顶级节点 if level1_text not in root: root[level1_text] = {"text": level1_text, "nodes": []} level1_node = root[level1_text] # 创建/获取二级节点 level2_node = next((node for node in level1_node["nodes"] if node["text"] == level2_text), None) if not level2_node: level2_node = {"text": level2_text, "nodes": []} level1_node["nodes"].append(level2_node) # 添加三级节点(带href属性) level3_node = {"text": level3_text, "href": href} level2_node["nodes"].append(level3_node) # 转换为列表并生成格式化JSON tree_json = json.dumps(list(root.values()), indent=2) print(tree_json)
处理DataFrame数据
如果输入是Pandas DataFrame,只需修改遍历逻辑:
import pandas as pd import json df = pd.DataFrame(data, columns=['level1', 'level2', 'level3', 'href']) root = {} for _, row in df.iterrows(): level1_text = row['level1'] level2_text = row['level2'] level3_text = row['level3'] href = row['href'] # 后续节点构建逻辑与列表版本完全一致 if level1_text not in root: root[level1_text] = {"text": level1_text, "nodes": []} level1_node = root[level1_text] level2_node = next((node for node in level1_node["nodes"] if node["text"] == level2_text), None) if not level2_node: level2_node = {"text": level2_text, "nodes": []} level1_node["nodes"].append(level2_node) level3_node = {"text": level3_text, "href": href} level2_node["nodes"].append(level3_node) tree_json = json.dumps(list(root.values()), indent=2) print(tree_json)
输出说明
运行代码后会生成完全符合Bootstrap TreeView要求的嵌套JSON,结构与你提供的示例一致。
内容的提问来源于stack exchange,提问作者Colin Kwong
相关产品推荐
相关产品推荐

