JSON Patch 构建器 (RFC 6902)
开发
RFC 6902 JSON Patch 是描述 JSON 文档更改的 wire 格式 — 用于 PATCH 请求、乐观更新、撤销历史和操作变换。这个工具做两个方向:粘贴 source 和 target JSON,得到将一个转换为另一个的最小 patch;或粘贴 source 和 patch,看应用后的结果。diff 使用递归结构比较,对包含斜杠或波浪号的键使用 `~0`/`~1` JSON Pointer 转义。apply 端遵循全部六个操作,包括 `test`(断言失败抛出错误)、`copy` 和 `move`。用于在打到服务器之前测试 patch,或通过示例找出正确的操作。
—
Patch (RFC 6902)
[
{
"op": "replace",
"path": "/age",
"value": 31
},
{
"op": "replace",
"path": "/address/city",
"value": "Busan"
},
{
"op": "remove",
"path": "/address/zip"
},
{
"op": "add",
"path": "/address/country",
"value": "KR"
},
{
"op": "replace",
"path": "/tags/1",
"value": "owner"
},
{
"op": "add",
"path": "/tags/2",
"value": "user"
}
]纯 RFC 6902 — 支持 add、remove、replace、move、copy、test 操作,带 `~0`/`~1` pointer 转义。
使用方法
- Diff 模式:粘贴 source 和 target,看 patch JSON。编辑任一侧查看 patch 如何变化。
- Apply 模式:粘贴 source 和 patch 数组,看结果文档。错误(坏 pointer、失败的 `test`)内联显示。
- JSON Pointer 语法:`/foo/0/bar` 走 `foo.0.bar`。把 `/` 转义为 `~1`,`~` 为 `~0`。数组路径中的尾随 `-` 表示『追加』。
常见问题
- 为什么不直接发送新文档?
- 一是带宽。二是并发:如果 Alice 和 Bob 都编辑文档,你可以语义化合并他们的 patch(`replace /name` 与 `add /tags/-` 兼容),而两个完整文档必须选一个赢家。此外,patch 是什么·何时变更的精确审计轨迹。
- 和 JSON Merge Patch (RFC 7396) 一样吗?
- 不一样。Merge Patch 更简单 — 你发送部分文档,其中存在的键覆盖,`null` 删除。对人类更容易但失去精度(不能添加到数组、不能表示字面 `null` 值、无原子 test)。RFC 6902(本工具)是精确 wire 格式。RFC 7396 是便利格式。