You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:30:52