vs code内置compare active file with功能可直接比对两个json文件,需手动触发而非拖拽自动比对;打开一个文件后通过命令面板或右键选择另一文件,左侧为基准、右侧为目标,差异按行高亮但不自动写入。

直接比对两个JSON文件用 Compare Active File With
VSCode 不会自动比对拖进来的两个 JSON 文件,必须手动触发。打开一个 JSON 文件后,右键编辑器标签或内容区 → Compare Active File With → 选另一个 JSON 文件(支持未保存的临时文件、跨项目路径)。对比视图默认并排,左侧是当前活动文件,右侧是被比较文件;所有差异按行高亮,但修改不会自动写入——复制粘贴得自己来。
常见错误:把 en.json 和 zh-CN.json 同时拖入,以为会自动比对,结果只是并列打开两个编辑器标签。还容易忽略“左侧应为基准版本”这个约定:比如拿 main 分支的配置当左,feature 分支的当右,否则绿色(新增)/红色(删除)语义会反直觉。
解决JSON合并冲突时别只点 Accept Both Changes
Git 合并时若两个分支都改了同一个 key(比如 "timeout": 5000 → "timeout": 3000),VSCode 冲突编辑器会标出 到 <code>>>>> branch-name 的块,并提供 Accept Current Change、Accept Incoming Change、Accept Both Changes 按钮。但 Accept Both Changes 只是文本拼接,不校验逻辑——比如两段都删了同一字段、或都重命名了不同字段为同名,会导致运行时报错。
实操建议:
- 光标停在冲突块内,按 Ctrl+Alt+M(Windows/Linux)调出菜单,比点击顶部按钮更快
- 多处冲突时,先点 Compare Changes 拉起三栏视图:左=ours、中=base、右=theirs,看清共同祖先到底是什么值
- 手动编辑后务必删干净所有 、<code>======、>>>>,否则 git add 会失败,git status 仍显示 unmerged
用 JSON Editor 扩展做结构化对比与同步编辑
原生比对只看文本行差异,对 JSON 这种嵌套结构容易漏掉键顺序变化、空字段增删等语义差异。装 JSON Editor 扩展后,右键 JSON 文件 → Open in JSON Editor,切换到 Compare 模式,它能按 key 路径递归比对,高亮缺失/类型变更/值差异,甚至识别 "false" 和 false 这类类型不一致。
更关键的是同步编辑能力:打开 en.json、zh-CN.json、ja.json 三个文件 → 右键任一 → JSON Synchronizer: Sync Selected Files(需另装 JSON Synchronizer)→ 所有文件并排显示,改一个 key 的值,其他文件对应位置实时更新。但注意:它不处理数组项顺序变更或新增嵌套层级,仅适用于结构完全一致的多语言/多环境配置。
格式化 + 排序前先确认是否影响 diff 可读性
JSON 字段排序(如用 Sort JSON Objects 插件)和格式化(Shift+Alt+F)会让文件更整洁,但也可能掩盖真实变更。比如两个文件原本只有 1 行差异,但格式化后变成 20 行重排,Compare Active File With 视图里全是噪音。
建议:
- 对比前关闭 editor.formatOnSave,避免保存时自动格式化干扰
- 在设置里开启 diffEditor.ignoreTrimWhitespace,跳过空格/缩进差异
- 多语言 JSON 同步前,先统一用 Prettify JSON 格式化,再用 Sort JSON Objects 排序,最后比对——顺序固定了,diff 才干净
真正容易被忽略的是:VSCode 的 JSON 比对永远是“文本层”动作,它不知道 "enabled": true 和 "disabled": false 是等价逻辑,也不理解 "retry": 3 和 "maxRetries": 3 是同一配置项的不同命名。人工核对语义,始终绕不开。











