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

如何简洁高效扁平化指定JSON并转换为目标结构DataFrame?

解决JSON转目标DataFrame的简洁方案

针对你不想生成过多列的需求,这里有个非常简洁且符合预期的方法,不需要复杂的循环或过度扁平化,用Python的列表推导式配合pandas就能轻松搞定,完全避开子键过多导致列爆炸的问题。

步骤示例

首先假设你的输入JSON已经加载为Python字典(如果是字符串格式,用json.loads()转一下即可):

import pandas as pd

# 输入数据(已转为Python字典)
data = {
    "key1": "value1",
    "key2": "value2",
    "key3": {
        "value11": [{"id": "a1", "name": "b1"}],
        "value22": [{"id": "a2", "name": "b2"}, {"id": "a4", "name": "b4"}],
        "value33": [{"id": "a3", "name": "b3"}]
    }
}

然后用列表推导式预处理数据,把key3的每个子键作为col_3的值,同时展开每个子键对应的列表项:

# 预处理生成符合目标结构的字典列表
processed_data = [
    {
        "col_1": data["key1"],
        "col_2": data["key2"],
        "col_3": key3_subkey,
        **item  # 展开列表中的id、name字段
    }
    for key3_subkey, item_list in data["key3"].items()
    for item in item_list
]

# 转成目标DataFrame
df = pd.DataFrame(processed_data)

运行后得到的df就是你想要的结构:

col_1col_2col_3idname
value1value2value11a1b1
value1value2value22a2b2
value1value2value22a4b4
value1value2value33a3b3

为什么这个方案适合你?

  • 避免列爆炸:不管key3下有多少个子键,最终只会生成固定的5列,完全符合你不想因子键过多生成大量列的需求。
  • 简洁高效:用列表推导式完成预处理,代码可读性高,执行效率也不错,不需要依赖额外小众工具(pandas是数据分析领域的常用包,属于常规工具范畴)。
  • 灵活扩展:如果后续key3的子结构有小变化(比如新增字段),只需要调整**item部分或者添加字段映射即可快速适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:22:45