VS Code中合并JSON重复键为数组或编号键的解决方案求助
解决VS Code中批量修复JSON重复键的问题
针对你手里数千个存在重复键的JSON文件,以下是两种在VS Code中可行的解决方案,避免工具直接删除重复键:
方案1:VS Code正则替换(单/少量文件快速处理)
如果只是处理单个或少量文件,可以用VS Code的正则查找替换功能,将重复的!is键合并为数组:
- 打开目标JSON文件,按下
Ctrl+H打开替换面板 - 点击面板右上角的
.*按钮启用正则模式 - 查找内容输入:
"condition":{\s*"!is":\s*(\d+)(?:,\s*"!is":\s*(\d+))(?:,\s*"!is":\s*(\d+))(?:,\s*"!is":\s*(\d+))
- 替换内容输入:
"condition":{"!is": [$1, $2, $3, $4]
- 点击"替换全部"即可完成单个文件的修复
注意:如果重复键数量不是固定4个,需要调整正则中的捕获组数量,或者分多次替换逐步合并。
方案2:Python脚本批量处理(数千文件高效处理)
针对大量文件,用Python脚本批量遍历处理是最优选择,支持自定义重复键的处理逻辑(合并数组/添加编号):
- 在VS Code中新建一个Python文件(比如
fix_duplicate_json.py),粘贴以下代码:
import os import json def process_duplicate_keys(pairs): result = {} for key, value in pairs: if key in result: # 方式1:将重复键的值合并为数组 if isinstance(result[key], list): result[key].append(value) else: result[key] = [result[key], value] # 方式2:为重复键添加编号(注释掉方式1,启用下面的代码) # count = 1 # while f"{key}{count}" in result: # count += 1 # result[f"{key}{count}"] = value else: result[key] = value return result # 替换为你的JSON文件所在目录 target_directory = "./json_files" # 遍历目录下所有JSON文件 for file_name in os.listdir(target_directory): if file_name.endswith(".json"): file_path = os.path.join(target_directory, file_name) try: with open(file_path, "r", encoding="utf-8") as f: # 通过object_pairs_hook捕获所有键值对(包括重复键) json_data = json.load(f, object_pairs_hook=process_duplicate_keys) with open(file_path, "w", encoding="utf-8") as f: json.dump(json_data, f, indent=2, ensure_ascii=False) print(f"已修复:{file_name}") except Exception as e: print(f"处理失败 {file_name}:{str(e)}")
- 修改代码中的
target_directory为你的JSON文件实际存放路径 - 打开VS Code终端,运行命令:
python fix_duplicate_json.py
关键说明
- 脚本通过
object_pairs_hook参数捕获所有键值对,不会丢失重复键的数据 - 两种处理逻辑二选一:默认是合并为数组,需要添加编号的话,注释掉方式1的代码,启用方式2即可
- 处理前务必备份所有JSON文件,避免意外数据损失
内容的提问来源于stack exchange,提问作者Joseph Jorgen
相关产品推荐
相关产品推荐

