将多个嵌套换行分隔JSON文件合并为带来源列的CSV
解决嵌套JSON合并为带来源列的CSV方案
核心思路
针对你提供的JSON结构,我们需要先展开顶层的id键值对,再扁平化嵌套的数组字段,最后给每条数据打上来源文件名的标记,再合并所有文件数据导出为CSV。
完整代码实现
import pandas as pd import json import os # 定义要处理的JSON文件所在文件夹路径(根据你的实际路径修改) json_folder = "./your_json_files" # 存储所有处理后的数据 all_data = [] # 遍历文件夹下的所有JSON文件 for filename in os.listdir(json_folder): if filename.endswith(".json"): file_path = os.path.join(json_folder, filename) # 读取JSON文件 with open(file_path, "r", encoding="utf-8") as f: json_data = json.load(f) # 遍历顶层的idA、idB等键 for item_id, item_data in json_data.items(): # 扁平化嵌套的property3数组,同时保留其他字段和当前的id # record_path指定要展开的数组字段,meta指定要保留的其他字段 df = pd.json_normalize( item_data, record_path=["property 3"], # 要展开的嵌套数组字段 meta=[ "property 1", "property 2", ("item_id",) # 把顶层的idA/idB作为一列 ] ) # 添加来源文件名列 df["数据来源"] = filename # 将当前文件处理后的数据加入总列表 all_data.append(df) # 合并所有数据 final_df = pd.concat(all_data, ignore_index=True) # 导出为CSV final_df.to_csv("./合并结果.csv", index=False, encoding="utf-8-sig")
关键步骤说明
- 遍历文件:用
os.listdir批量读取目标文件夹下的所有JSON文件,自动过滤非JSON文件。 - 处理顶层id:你的JSON顶层是键值对(idA对应一个对象),所以需要循环取出每个id对应的对象数据。
- 扁平化嵌套数组:使用
pd.json_normalize的record_path参数指定要展开的property 3数组,meta参数保留其他非数组字段,同时把顶层的id也加入到数据中。 - 添加来源列:直接给当前处理的DataFrame新增一列,值为当前文件名,确保每条数据都能追溯来源。
- 合并与导出:用
pd.concat合并所有文件的DataFrame,最后导出为CSV(utf-8-sig保证中文在Excel中正常显示)。
常见问题排查
- JSON格式错误:如果运行时提示JSON解析错误,检查你的JSON文件是否有语法错误(比如逗号遗漏、引号不匹配),可以用在线JSON校验工具验证。
- 字段名不匹配:如果多个JSON文件的schema不一致(比如有的没有
property 3),可以在代码中添加判断逻辑跳过异常数据,或者统一处理字段缺失的情况。 - 路径问题:确保
json_folder的路径是正确的,Windows路径注意用双反斜杠\\或者原始字符串r".\your_path"。
内容的提问来源于stack exchange,提问作者winston
相关产品推荐
相关产品推荐

