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

如何在Python中将含items列表的JSON转为带表头的分号分隔文件

问题

我有一个包含items列表的JSON数据,需要将其转换为带表头的分号分隔文件,输出格式需包含id、date以及order数组中每个对象的字段。问题是部分order项缺少部分字段,无法直接拼接值,且需包含所有出现过的字段名作为表头。

给定JSON数据:

{
    "items": [
        {
            "id": "06107",
            "date": "2023-09-25T01:51:04Z",
            "order": [
                {
                    "prefix": "VO",
                    "number": "32233809",
                    "quantity": 1,
                    "index": 4
                },
                {
                    "prefix": "VO",
                    "number": "31438125",
                    "quantity": 1,
                    "index": 4
                }
            ]
        },
        {
            "id": "06107",
            "date": "2023-09-25T10:00:51Z",
            "order": [
                {
                    "prefix": "VO",
                    "number": "31407983",
                    "quantity": 1,
                    "code": 14,
                    "index": 4
                },
                {
                    "prefix": "VO",
                    "number": "986116",
                    "quantity": 6,
                    "code": 12,
                    "index": 4
                }
            ]
        }
    ]
}

期望输出的分号分隔文件:

id;date;prefix;number;quantity;code;index
06107;2023-09-25T01:51:04Z;VO;32233809;1;;4
06107;2023-09-25T01:51:04Z;VO;31438125;1;;4
06107;2023-09-25T10:00:51Z;VO;31407983;1;14;4
06107;2023-09-25T10:00:51Z;VO;986116;6;12;4

我猜测可以用pandas解决,但不清楚如何进行映射和导出。

解决方案

用pandas可以轻松处理这个需求,核心是展开嵌套的order数组并自动补全缺失字段,步骤如下:

  1. 读取JSON数据
    将JSON数据加载到pandas的DataFrame中:

    import pandas as pd
    import json
    
    # 从文件读取JSON,或直接定义data变量
    with open('data.json', 'r') as f:
        data = json.load(f)
    
    df = pd.DataFrame(data['items'])
    
  2. 展开嵌套的order字段
    先拆分order数组为单独行,再展开每个order对象的键值对为独立列:

    # 拆分order数组,每个元素占一行
    df_exploded = df.explode('order', ignore_index=True)
    # 展开order对象的字段为列
    df_normalized = pd.json_normalize(df_exploded['order'])
    # 合并原有的id、date列与展开后的order字段列
    final_df = pd.concat([df_exploded[['id', 'date']], df_normalized], axis=1)
    
  3. 导出为分号分隔文件
    使用to_csv方法生成目标文件,缺失字段会自动留空:

    final_df.to_csv('output.csv', sep=';', index=False)
    

运行代码后,生成的output.csv与期望输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:23:37