Python新手求助:如何将大型嵌套JSON文件转换为CSV?
嘿,作为Python新手要处理嵌套JSON转CSV确实有点绕,我来给你几个实用的方案,从基础手动处理到用工具库简化操作都有,一步步来哈!
首先咱们先看看你给的示例JSON结构:顶层有一堆普通字段,还有个Signatories的嵌套数组,里面是包含Name和BVB的字典。转CSV的关键就是把这些嵌套的字段“展开”成表格里的列,或者根据需求处理多元素的情况。
方案1:用Python内置的json和csv模块手动处理(适合理解原理)
如果想搞清楚底层逻辑,可以用这两个基础库来写代码,分情况处理:
情况1:Signatories只有一个元素(像你的示例那样)
import json import csv # 第一步:读取并加载JSON文件 with open('your_data.json', 'r', encoding='utf-8') as json_file: json_data = json.load(json_file) # 第二步:确定CSV的表头——把顶层字段和嵌套字段合并 top_level_keys = [key for key in json_data.keys() if key != 'Signatories'] nested_keys = ['Signatories_Name', 'Signatories_BVB'] headers = top_level_keys + nested_keys # 第三步:整理要写入的行数据 top_level_values = [json_data[key] for key in top_level_keys] # 提取嵌套的签名者信息 signatory = json_data['Signatories'][0] nested_values = [signatory['Name'], signatory['BVB']] full_row = top_level_values + nested_values # 第四步:写入CSV文件 with open('output.csv', 'w', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file) writer.writerow(headers) writer.writerow(full_row)
情况2:Signatories有多个元素(每个签名者对应一行)
如果你的JSON里Signatories是多个对象的数组,咱们可以循环每个签名者,重复顶层字段生成多行:
import json import csv with open('your_data.json', 'r', encoding='utf-8') as json_file: json_data = json.load(json_file) top_level_keys = [key for key in json_data.keys() if key != 'Signatories'] nested_keys = ['Signatories_Name', 'Signatories_BVB'] headers = top_level_keys + nested_keys with open('output_multi.csv', 'w', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file) writer.writerow(headers) # 遍历每个签名者,生成一行数据 for signatory in json_data['Signatories']: top_level_values = [json_data[key] for key in top_level_keys] nested_values = [signatory['Name'], signatory['BVB']] writer.writerow(top_level_values + nested_values)
方案2:用pandas一键搞定(推荐新手,简单高效)
如果你不想写那么多代码,pandas库的json_normalize函数可以自动帮你展开嵌套的JSON结构,超级省心!
首先得先安装pandas(如果没装的话):
pip install pandas
然后代码就几行:
import pandas as pd import json # 读取JSON数据 with open('your_data.json', 'r', encoding='utf-8') as json_file: json_data = json.load(json_file) # 自动展开嵌套结构生成DataFrame df = pd.json_normalize(json_data) # 保存为CSV,index=False是去掉默认的行索引 df.to_csv('output_pandas.csv', index=False, encoding='utf-8')
运行之后,你会得到一个CSV,嵌套的字段会自动命名成Signatories.Name、Signatories.BVB这样的格式,如果Signatories有多个元素,会自动生成多行对应每个签名者,顶层字段会重复填充,完全不用自己写循环!
小提醒:处理大型JSON文件
如果你的JSON文件特别大,一次性加载到内存可能会卡,这时候可以:
- 如果JSON是每行一个JSON对象的格式,用pandas的
read_json配合chunksize参数逐块处理; - 如果是单个大JSON对象,也可以考虑用流式JSON解析库(比如
ijson)来逐部分读取处理,避免内存溢出。
内容的提问来源于stack exchange,提问作者SS360
相关产品推荐
相关产品推荐

