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

如何在Python中将嵌套JSON规范化为行列表格形式?

问题:如何将嵌套JSON展开为扁平化表格格式?

我处理了一个大型嵌套JSON文件,但部分列仍保留JSON格式数据,示例数据如下:

data = [
    {
        "task": "jump",
        "taskid": "task-001",
        "task-req": [
            {"taskid": "task-001", "requestID": "task-001-r1"},
            {"taskid": "task-001", "requestID": "task-001-r2"},
            {"taskid": "task-001", "requestID": "task-001-r3"}
        ],
        "task-desc": {
            "task-001-r1": [{"taskid": "task-001", "task": "jump", "details": "long jump"}],
            "task-001-r2": {"taskid": "task-001", "task": "jump", "details": "short jump"},
            "task-001-r3": {"taskid": "task-001", "task": "jump", "details": "high jump"}
        }
    }
]

我期望得到如下扁平化表格格式的输出:

task    taskid    requestID     details
jump    task-001  task-001-r1   long jump
jump    task-001  task-001-r2   short jump
jump    task-001  task-001-r3   high jump

我尝试使用json.normalize()方法,但只能生成顶层列,嵌套的JSON数据仍以值形式存在对应行中,得到的输出如下:

task    taskid    task-req                                                  task-desc
jump    task-001  [{"taskid": "task-001","requestID": "task-001-r1"}, ...]  {"task-001-r1": [{"taskid": "task-001",...}, ...]}

请问有没有方法实现我想要的格式?


解决方案

可以通过手动遍历嵌套结构,提取所需字段后组装成扁平化的数据集,再转成DataFrame。步骤如下:

1. 修正JSON语法问题

原示例中task-desc里的task-001-r1是数组,其余是对象,以下代码兼容这种混合结构;如果实际数据结构更规整,可简化逻辑。

2. 编写Python代码处理

import pandas as pd

# 示例数据(已修正语法错误)
data = [
    {
        "task": "jump",
        "taskid": "task-001",
        "task-req": [
            {"taskid": "task-001", "requestID": "task-001-r1"},
            {"taskid": "task-001", "requestID": "task-001-r2"},
            {"taskid": "task-001", "requestID": "task-001-r3"}
        ],
        "task-desc": {
            "task-001-r1": [{"taskid": "task-001", "task": "jump", "details": "long jump"}],
            "task-001-r2": {"taskid": "task-001", "task": "jump", "details": "short jump"},
            "task-001-r3": {"taskid": "task-001", "task": "jump", "details": "high jump"}
        }
    }
]

# 初始化空列表存储扁平化数据
flat_data = []

# 遍历顶层任务
for task_item in data:
    base_task = task_item["task"]
    base_taskid = task_item["taskid"]
    task_req_list = task_item["task-req"]
    task_desc_dict = task_item["task-desc"]
    
    # 遍历每个请求
    for req in task_req_list:
        request_id = req["requestID"]
        # 获取对应的详情,兼容数组和对象格式
        desc = task_desc_dict[request_id]
        details = desc[0]["details"] if isinstance(desc, list) else desc["details"]
        
        # 组装成字典
        flat_data.append({
            "task": base_task,
            "taskid": base_taskid,
            "requestID": request_id,
            "details": details
        })

# 转成DataFrame并输出
df = pd.DataFrame(flat_data)
print(df.to_string(index=False))

输出结果

task   taskid    requestID    details
jump task-001 task-001-r1  long jump
jump task-001 task-001-r2 short jump
jump task-001 task-001-r3  high jump

说明

手动遍历嵌套结构可以精准控制提取的字段,解决json.normalize()无法直接处理非规则嵌套(如混合数组/对象)的问题;如果实际JSON结构统一,可进一步简化details的提取逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:54:17