如何使用Python将复杂嵌套JSON文件转换为CSV?
嵌套JSON转CSV的解决方案
针对你遇到的外层commits结构需手动删除、json_normalize生成的CSV字段内容冗余的问题,直接用以下两种方式解决:
1. 用json_normalize自动展开嵌套数组(适合常规多层嵌套)
无需手动修改JSON文件,直接定位commits数组,指定要展开的嵌套字段,同时保留顶层信息:
示例代码
import json import pandas as pd # 加载JSON文件 with open('your_commit_data.json', 'r', encoding='utf-8') as f: raw_data = json.load(f) # 直接提取commits数组,跳过手动删外层的步骤 commit_list = raw_data['commits'] # 展开refactorings嵌套数组,关联顶层字段,扁平化嵌套结构 result_df = pd.json_normalize( commit_list, record_path='refactorings', # 指定要展开的嵌套数组字段 meta=['repository', 'sha1', 'url'], # 要保留的顶层字段 sep='_', # 嵌套字段用下划线拼接,避免字段名冲突 errors='ignore' # 忽略缺失字段的报错,避免程序中断 ) # 导出为CSV result_df.to_csv('commit_refactorings.csv', index=False, encoding='utf-8')
代码说明
record_path='refactorings':将每个commit下的refactorings数组拆分为多行,每行对应一个重构操作,同时自动关联该commit的repository、sha1、url信息sep='_':比如refactorings里的details.old_name会被转为details_old_name,避免CSV出现嵌套字段名errors='ignore':如果部分commit没有refactorings或某个嵌套字段,会自动留空,不会抛出异常
2. 手动循环解析(适合超复杂嵌套结构)
如果refactorings内部还有多层数组嵌套,用手动循环的方式能更精准控制字段提取:
示例代码
import json import pandas as pd with open('your_commit_data.json', 'r', encoding='utf-8') as f: raw_data = json.load(f) processed_rows = [] for commit in raw_data['commits']: # 提取顶层固定字段 base_info = { 'repository': commit['repository'], 'sha1': commit['sha1'], 'url': commit['url'] } # 遍历每个重构操作 for ref in commit.get('refactorings', []): # 如果重构操作里还有子数组(比如changes),继续展开 for change in ref.get('changes', [{}]): # 合并顶层信息与嵌套字段 row = {**base_info, **ref, **change} processed_rows.append(row) # 转换为DataFrame并导出 result_df = pd.DataFrame(processed_rows) result_df.to_csv('detailed_commit_refactorings.csv', index=False, encoding='utf-8')
代码说明
这种方式可以逐层拆解所有嵌套结构,完全自定义要提取的字段,避免出现单个字段包含多个数组内容的问题,适合结构极不规整的JSON数据。
内容的提问来源于stack exchange,提问作者Giammaria GIORDANO
相关产品推荐
相关产品推荐

