如何在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数组并自动补全缺失字段,步骤如下:
读取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'])展开嵌套的
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)导出为分号分隔文件
使用to_csv方法生成目标文件,缺失字段会自动留空:final_df.to_csv('output.csv', sep=';', index=False)
运行代码后,生成的output.csv与期望输出完全一致。
内容的提问来源于stack exchange,提问作者Jeppe
相关产品推荐
相关产品推荐

