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

如何基于条件对JSON文件进行查找替换?

批量修改JSON文件:条件匹配下的字段替换方案

我来给你分享一个实用的Python解决方案,刚好能解决你提到的需求——批量处理JSON文件,当field2的值为"cdf"时,把field1的"abc"替换成"qrs",完全不用在意字段的顺序问题。

实现思路

因为JSON本质是键值对结构,我们可以用Python把每个JSON文件解析成字典,这样就能轻松检查和修改字段,最后再把字典转回JSON格式写回文件。具体步骤如下:

  • 遍历指定文件夹里的所有.json文件
  • 读取每个文件的内容,解析为Python字典
  • 检查两个条件:字典里存在field2且值为"cdf",同时field1的值是"abc"
  • 满足条件就修改field1的值为"qrs"
  • 将修改后的字典重新序列化为JSON,写回原文件(建议先备份原文件,避免数据丢失)

完整代码示例

import json
import os
from shutil import copy2

def modify_json_files(target_dir):
    # 遍历目标目录下的所有JSON文件
    for filename in os.listdir(target_dir):
        if filename.endswith('.json'):
            file_path = os.path.join(target_dir, filename)
            
            # 先备份原文件(可选但推荐)
            backup_path = f"{file_path}.bak"
            copy2(file_path, backup_path)
            
            try:
                # 读取并解析JSON文件
                with open(file_path, 'r', encoding='utf-8') as f:
                    data = json.load(f)
                
                # 检查条件:存在field2且为"cdf",同时field1是"abc"
                if data.get('field2') == 'cdf' and data.get('field1') == 'abc':
                    data['field1'] = 'qrs'
                    print(f"已修改文件:{filename}")
                    
                    # 将修改后的数据写回文件
                    with open(file_path, 'w', encoding='utf-8') as f:
                        # ensure_ascii=False保留中文,indent=4让JSON格式更美观
                        json.dump(data, f, ensure_ascii=False, indent=4)
                else:
                    print(f"无需修改文件:{filename}")
                    
            except json.JSONDecodeError:
                print(f"警告:{filename}不是有效的JSON文件,跳过处理")
            except Exception as e:
                print(f"处理文件{filename}时出错:{str(e)}")

# 替换成你的JSON文件所在目录
target_directory = "./your_json_files"
modify_json_files(target_directory)

注意事项

  • 备份文件:代码里默认会给每个原文件生成.bak后缀的备份,这样即使修改出错也能恢复原数据
  • 编码问题:如果你的JSON文件有中文或其他非ASCII字符,一定要指定encoding='utf-8',避免乱码
  • 异常处理:代码里加入了解析错误和通用异常的捕获,避免单个文件出错导致整个程序终止
  • 字段存在性:用data.get('field2')而不是直接data['field2'],避免因为字段不存在而抛出KeyError

比如你提供的示例文件:

  • json1 = { "field1" : "abc", "field2" : "cdf" } 会被修改为{ "field1" : "qrs", "field2" : "cdf" }
  • json2 = { "field1" : "abc", "field2" : "xyz" } 会被判定为无需修改,保持原样

内容的提问来源于stack exchange,提问作者Steven

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:35:26