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

如何用Python将含父级列的CSV转换为层级JSON?

当然有简便的实现方法!针对你的需求,我推荐两种常用方案——一种适合离线批量转换,另一种完美适配D3前端场景,都能轻松生成你要的树形JSON结构:

方案1:Python脚本处理(适合离线转换)

如果需要提前把CSV转成JSON文件,用Python+Pandas可以快速搞定,代码逻辑清晰,处理大量数据也很高效:

首先确保安装了Pandas:

pip install pandas

然后运行下面的脚本:

import pandas as pd
import json

def build_tree(df, parent_id=None):
    # 筛选当前父节点的所有子节点
    children = df[df['ParentBrandID'] == parent_id].to_dict('records')
    for child in children:
        # 递归查找子节点的子级
        child_children = build_tree(df, child['BrandID'])
        if child_children:
            child['children'] = child_children
        # 调整字段格式,只保留需要的name字段
        child['name'] = child.pop('Name')
        del child['BrandID']
        del child['ParentBrandID']
    return children

# 读取CSV,处理空值(根节点的ParentBrandID设为None)
df = pd.read_csv('data.csv', dtype={'ParentBrandID': float})
df['ParentBrandID'] = df['ParentBrandID'].where(pd.notnull(df['ParentBrandID']), None)

# 构建树形结构(单根节点取第一个结果)
tree = build_tree(df)[0]

# 保存为JSON文件
with open('tree.json', 'w', encoding='utf-8') as f:
    json.dump(tree, f, indent=2, ensure_ascii=False)

运行后会生成和你示例完全一致的tree.json,如果CSV有多根节点,只需要把tree = build_tree(df)[0]改成tree = build_tree(df),再循环保存成多个JSON文件即可。

方案2:前端用D3.js直接处理(适合动态加载)

如果你的数据需要在前端动态加载并直接用于D3可视化,那用D3自带的d3.stratify()方法最方便——这是D3专门为父子结构数据设计的工具,一步就能生成树形结构:

d3.csv('data.csv').then(data => {
    // 配置层级转换规则
    const stratify = d3.stratify()
        .id(d => d.BrandID)  // 指定节点ID字段
        .parentId(d => d.ParentBrandID || null);  // 指定父ID字段,空值转为null

    // 生成层级结构并调整字段格式
    const root = stratify(data)
        .each(d => {
            d.name = d.data.Name;
            // 移除不需要的冗余属性
            delete d.id;
            delete d.parentId;
            delete d.data;
        });

    // 输出JSON字符串(如果需要导出文件)
    const treeJson = JSON.stringify(root, null, 2);
    console.log(treeJson);

    // 直接用root对象喂给D3树形布局,比如:
    // const treeLayout = d3.tree().size([width, height]);
    // treeLayout(root);
});

这个方法不需要额外转换文件,加载CSV后直接生成D3能直接使用的树形结构,完全贴合你的需求。

注意事项

  • 确保CSV里的ParentBrandID空值是真正的空单元格,不是字符串"null"或"NaN",如果是字符串格式,需要在代码里额外做转换。
  • 多根节点场景下,两种方案都会返回根节点数组,只需循环处理即可。

内容的提问来源于stack exchange,提问作者Mario Antonio Alvarez Enriquez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:41:35