JSON 在线对比
并排对比 JSON 或 YAML,把注意力放在真正的值变化上,而不是格式或对象键顺序。
JSON Diff 是怎么工作的
粘贴改动前和改动后的两份文档,选 JSON 或 YAML,点 Compare。工具把两边都解析成数据值再计算差异:显示时对象键会排序,然后逐行对比归一化后的文档。
这样能去掉一大类噪声。一个 API 响应里 id 排在 name 前面,另一个反过来,两个对象的成员其实完全一样。重新格式化或改缩进,同样不算数据变化。
结果包含:
- 并排展示删除行、新增行和未变行;
- 新增、删除、修改、未变的数量统计;
- 对象、数组和基础值的语义化比较;
- JSON 和 YAML 文档走同一套流程。
对象顺序被忽略,数组顺序不会
JSON 对象成员靠键来定位,所以 {"a":1,"b":2} 和 {"b":2,"a":1} 判定为相等。数组则是有序序列 —— 把 ["admin", "editor"] 改成 ["editor", "admin"] 就是一次真实的变更,哪怕你的应用后面把它们当集合处理。
分析 API 响应时这个区别很关键:对象顺序变了是展示层面的噪声,而队列、优先级列表或时间序列的顺序变了,行为可能就不一样了。
把摘要当地图看,别当判决书
diff 报告的是结构变化,它不知道你的 schema,也不懂你的业务规则。新增一个可选字段可能完全无害,而把 "userId": "007" 改成 "userId": 7 看着改动很小,却可能是破坏性变更。它同样判断不了某个时间戳、URL、权限或金额在语义上对不对。
做回归时,用 diff 定位改动,再拿 API 约定或预期的测试数据去逐条评估。两边输入都必须能按所选格式解析成功;格式有问题的 JSON,先用 JSON Fix 修好再来对比。
FAQ
为什么排序过和没排序的版本会被判定为相同?
对象键在逐行展示前已经归一化,比较是按键名进行的。键顺序和缩进不影响数据的值。
工具会忽略数组顺序吗?
不会。数组位置是有意义的,移动、插入或删除元素都会显示为变更。
这算 JSON Schema 兼容性检查吗?
不算。它比较的是两个解析后的值。如果你要确认新文档是否仍然兼容某个正式接口,请用 schema 校验器或契约测试。