JSON 对比规则是什么?
| 变化情况 | 结果 | 示例 |
|---|---|---|
| 对象字段顺序不同 | 不算差异 | {"a":1,"b":2} 与 {"b":2,"a":1} 相同。 |
| 对象字段新增或删除 | 显示新增或删除路径 | $.user.avatar 被加入或移除。 |
| 基础值或类型变化 | 显示变化及左右值 | true 变为 false,或 1 变为 "1"。 |
| 数组元素顺序变化 | 按下标显示差异 | 交换第 0、1 项会产生对应路径变化。 |
一个接口版本对比的例子
旧响应
{
"user": {"active": true},
"orders": []
}旧版本没有新的订单字段。
新响应
{
"user": {"active": false},
"orders": [{"id": "ORD-003"}]
}对比结果会显示 $.user.active 的变化和 $.orders[0] 的新增。
对比前先确定你想验证什么
- 接口升级时,重点看字段是否删除、类型是否变化、数组元素结构是否变化。
- 配置变更时,重点看明确路径的值,不要因为数组顺序变化就误判业务变更。
- 如果左右 JSON 不能解析,先用 JSON 校验页修复语法,再进行对比。
页面不支持“忽略某些字段”或“按 ID 匹配数组元素”。需要按业务主键比较数组时,应在项目测试中使用专门的断言逻辑。
常见问题
- 两份 JSON 字段顺序不同会被判定为差异吗?
- 不会。对象按字段名递归比较,字段排列顺序变化不会被视为内容变化。
- 数组顺序变化会显示吗?
- 会。数组按下标比较,因此元素调换位置会显示为对应下标的变化。这是结构比较,不是按业务 ID 的集合比较。
- 结果中的路径有什么用?
- 路径告诉你差异所在层级,例如
$.user.name。可直接回到 JSONPath 页验证该字段,或在代码中定位对应模型。