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

如何用Python Pandas将嵌套JSON转换为对比式CSV表格?

解决多层嵌套JSON转颜色对比CSV/表格的方法

先拿一个符合需求的嵌套JSON示例来演示,假设数据结构如下:

{
  "Group1": {
    "ItemA": {"color": "#FF0000"},
    "ItemB": {"color": "#00FF00"},
    "ItemC": {"color": "#0000FF"}
  },
  "Group2": {
    "ItemA": {"color": "#FF5555"},
    "ItemB": {"color": "#55FF55"},
    "ItemD": {"color": "#5555FF"}
  },
  "Group3": {
    "ItemA": {"color": "#FFAAAA"},
    "ItemC": {"color": "#AA00AA"},
    "ItemD": {"color": "#00AAAA"}
  },
  "Group4": {
    "ItemB": {"color": "#FFFF00"},
    "ItemC": {"color": "#FF00FF"},
    "ItemD": {"color": "#00FFFF"}
  }
}

你之前用pd.json_normalize(max_level=0)只能拿到外层分组的嵌套对象,是因为这个方法默认把嵌套层级展开成列,但你需要的是子项作为行、分组作为列的对比结构,得换个思路处理:

步骤1:加载并整理成长格式数据

先把所有分组的子项和对应颜色拆出来,生成包含Item、Group、Color三列的长表:

import json
import pandas as pd

# 加载JSON(如果是本地文件,用with open("your_data.json", "r") as f: json_data = json.load(f))
json_data = {
    "Group1": {"ItemA": {"color": "#FF0000"}, "ItemB": {"color": "#00FF00"}, "ItemC": {"color": "#0000FF"}},
    "Group2": {"ItemA": {"color": "#FF5555"}, "ItemB": {"color": "#55FF55"}, "ItemD": {"color": "#5555FF"}},
    "Group3": {"ItemA": {"color": "#FFAAAA"}, "ItemC": {"color": "#AA00AA"}, "ItemD": {"color": "#00AAAA"}},
    "Group4": {"ItemB": {"color": "#FFFF00"}, "ItemC": {"color": "#FF00FF"}, "ItemD": {"color": "#00FFFF"}}
}

# 遍历嵌套结构,提取关键信息
rows = []
for group_name, items in json_data.items():
    for item_name, details in items.items():
        rows.append({
            "Item": item_name,
            "Group": group_name,
            "Color": details["color"]
        })

df_long = pd.DataFrame(rows)

步骤2:转成对比用的宽格式表格

把长表转成子项为行、分组为列的结构,直接实现颜色值的横向对比:

# 用pivot方法实现行列转换
df_wide = df_long.pivot(index="Item", columns="Group", values="Color")

# 保存为CSV文件
df_wide.to_csv("color_comparison.csv")

最终得到的表格结构如下(空值表示对应分组没有该子项):

ItemGroup1Group2Group3Group4
ItemA#FF0000#FF5555#FFAAAANaN
ItemB#00FF00#55FF55NaN#FFFF00
ItemC#0000FFNaN#AA00AA#FF00FF
ItemDNaN#5555FF#00AAAA#00FFFF

处理更深层级的嵌套

如果你的JSON有更深层级(比如Item下还有子子项),只需要在遍历的时候多加一层,把子项路径拼接起来即可:

rows = []
for group_name, items in json_data.items():
    for item_name, details in items.items():
        # 判断是否是更深层级的嵌套(值为字典且包含带color的子项)
        if isinstance(details, dict) and all(isinstance(v, dict) and "color" in v for v in details.values()):
            for subitem_name, sub_details in details.items():
                rows.append({
                    "Item": f"{item_name}.{subitem_name}",  # 用点连接层级名称
                    "Group": group_name,
                    "Color": sub_details["color"]
                })
        else:
            rows.append({
                "Item": item_name,
                "Group": group_name,
                "Color": details["color"]
            })

这样就能兼容更复杂的嵌套结构,保证所有颜色值都能被提取并对比展示。

内容的提问来源于stack exchange,提问作者Nils

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:11:16