Python按transactionTypeName值拆分JSON为多个独立文件
Python按交易类型动态拆分JSON文件实现
核心逻辑
- 自动识别
transactions数组中所有transactionTypeName值,无需提前枚举固定交易类型,支持任意数量类型动态适配 - 完整保留源JSON所有顶层非
transactions公共字段,输出结构与源文件完全一致 - 每个拆分后文件的
transactions数组仅保留对应交易类型的条目
完整实现代码
import json import os from copy import deepcopy def split_json_by_transaction_type(source_file_path, output_dir="./split_output"): # 初始化输出目录 os.makedirs(output_dir, exist_ok=True) # 加载源JSON数据 with open(source_file_path, "r", encoding="utf-8") as f: source_data = json.load(f) # 提取所有公共字段(剔除transactions字段) public_fields = {} for key, value in source_data.items(): if key != "transactions": public_fields[key] = deepcopy(value) # 按transactionTypeName对交易记录分组 transaction_groups = {} for trans in source_data.get("transactions", []): type_name = trans["transactionTypeName"] if type_name not in transaction_groups: transaction_groups[type_name] = [] transaction_groups[type_name].append(deepcopy(trans)) # 逐一生成拆分后的JSON文件 for type_name, trans_list in transaction_groups.items(): output_data = deepcopy(public_fields) output_data["transactions"] = trans_list # 替换文件名非法字符,避免写入失败 safe_filename = f"transactions_{type_name.replace('/', '_').replace('\\', '_')}.json" output_path = os.path.join(output_dir, safe_filename) with open(output_path, "w", encoding="utf-8") as f: json.dump(output_data, f, ensure_ascii=False, indent=4) print(f"生成完成: {output_path}") if __name__ == "__main__": # 替换为实际源JSON文件路径 split_json_by_transaction_type("source.json")
使用说明
- 将代码中
split_json_by_transaction_type传入的参数替换为实际源JSON文件路径即可运行 - 拆分后的文件默认存储在当前目录下的
split_output文件夹,命名规则为transactions_{交易类型名}.json - 代码采用深拷贝处理嵌套结构,避免对象引用污染,输出字段顺序、嵌套结构与源文件完全一致
效果说明
针对提供的示例源文件,运行后会自动生成3个对应文件:
transactions_Can.json:仅保留transactionTypeName为Can的交易记录transactions_Worm.json:仅保留transactionTypeName为Worm的交易记录,结构与预期输出完全匹配transactions_Use.json:仅保留transactionTypeName为Use的交易记录
后续源文件新增任意交易类型时无需修改代码,程序会自动识别新类型生成对应文件。
内容的提问来源于stack exchange,提问作者CzarSvk
相关产品推荐
相关产品推荐

