You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过HTTP PATCH(JSON PATCH)编辑或删除集合中的项

针对带唯一ID集合的JSON PATCH解决方案

标准RFC6902内的折中方案

虽然RFC6902规定数组操作必须使用索引,但可以通过**test+目标操作**的组合规避索引变更问题,适合并发较低的场景:

删除集合项

先通过test验证指定索引下的项ID是否匹配目标值,再执行remove:

[
  { "op": "test", "path": "/foo/0/id", "value": 357 },
  { "op": "remove", "path": "/foo/0" }
]

注意:若请求处理期间集合被其他请求修改,这种方式仍可能出现误操作,仅适合单线程或低并发场景。

编辑集合项

先定位目标项,再对子属性执行replace实现部分更新:

[
  { "op": "test", "path": "/foo/0/id", "value": 357 },
  { "op": "replace", "path": "/foo/0/name", "value": "UpdatedName" }
]

.NET Core下的非标准方案(推荐)

针对你的需求,有两种更实用的非标准实现方式:

1. 使用第三方扩展库

部分社区库扩展了Microsoft.AspNetCore.JsonPatch,支持通过唯一ID定位集合项:

  • 这类库能解析类似/foo/id/357的路径,自动查找集合中ID为357的项并执行操作,直接使用你示例中的格式即可:
[
  { "op": "remove", "path": "/foo/id/357" }
]
  • 子项部分更新也支持相同语法:
[
  { "op": "replace", "path": "/foo/id/357/description", "value": "Updated description" }
]

2. 自定义请求处理中间件

如果不想依赖第三方库,可以编写中间件拦截PATCH请求:

  1. 读取请求体中的JsonPatch操作集合
  2. 遍历每个操作,解析路径中的id/{value}规则
  3. 查询目标集合,找到对应ID项的索引,将路径替换为标准索引格式(如/foo/2)
  4. 将修改后的JsonPatch文档传递给后续标准处理流程

方案对比

  • 标准折中方案:无需额外依赖,但抗并发能力弱,仅适合简单场景。
  • 非标准库/自定义中间件:彻底解决索引变更问题,新增集合属性时无需额外编写接口,扩展性更强,是长期维护的最优选择。

补充:你提到的基于值的数组操作提案仅支持简单类型,且长期未落地,标准方案短期内无法满足复杂类型的ID匹配需求。

内容的提问来源于stack exchange,提问作者Mykola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 13:45:28