You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中从List或Dataframe生成Treeview JSON?

Python实现列表转Bootstrap TreeView嵌套JSON

实现思路

我们需要将扁平的三层结构数据(标题-章节-小节+链接)转换为嵌套树形结构,核心是逐层构建节点并避免重复创建父节点:

  1. 用字典存储已创建的顶级节点,通过文本快速定位,避免低效遍历查找
  2. 依次处理每一行数据,逐层检查父节点是否存在,不存在则创建
  3. 最终将字典中的顶级节点转换为列表,再序列化为格式化的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:35:27