JSON Merge Patch && JSON PATH

一 JSON Merge Patch

Json Merge Patch 描述了如何修改目标JSON 文档的一种格式,即如果被提供的merge patch 中存在目标文档中不存在的成员,则该成员将会新加;如果被提供的成员与目标成员都存在则做替换修改;在Merge Patch 中的null值意味着删除目标中该对象,

示例1如下:

目标文档

json 复制代码
{
     "a": "b",
     "c": {
       "d": "e",
       "f": "g"
     }
  }

merge patch 用于改变a的值,删除f,

json 复制代码
PATCH /target HTTP/1.1
Host: example.org
Content-Type: application/merge-patch+json

   {
     "a":"z",
     "c": {
       "f": null
     }
   }

示例2如下:

目标json文档

json 复制代码
{
     "title": "Goodbye!",
     "author" : {
       "givenName" : "John",
       "familyName" : "Doe"
     },
     "tags":[ "example", "sample" ],
     "content": "This will be unchanged"
   }

merge patch

一个用户想要更改title的值,新加phoneNumber成员、content成员,删除givenName成员,修改tags的值,就可以发送以下请求

json 复制代码
PATCH /my/resource HTTP/1.1
Host: example.org
Content-Type: application/merge-patch+json

   {
     "title": "Hello!",
     "phoneNumber": "+01-123-456-7890",
     "author": {
       "familyName": null
     },
     "tags": [ "example" ]
   }

最终结果

json 复制代码
{
     "title": "Hello!",
     "author" : {
       "givenName" : "John"
     },
     "tags": [ "example" ],
     "content": "This will be unchanged",
     "phoneNumber": "+01-123-456-7890"
   }

总结

Merge Patch Format 一般会使用HTTP协议中的PATCH方法进行发送请求,并且其 Content-Type类型为 application/merge-patch+json

二 JSON PATH

JSON是数据结构化存储常用的数据格式,HTTP协议在原有的方法基础上,扩展出了PATCH方法,该方法使用JOSN PATCH格式的语法对数据进行加工。JSON PATCH格式的HTTP PATCH请求示例如下

json 复制代码
   PATCH /my/data HTTP/1.1
   Host: example.org
   Content-Length: 326
   Content-Type: application/json-patch+json
   If-Match: "abc123"

   [
     { "op": "test", "path": "/a/b/c", "value": "foo" },
     { "op": "remove", "path": "/a/b/c" },
     { "op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ] },
     { "op": "replace", "path": "/a/b/c", "value": 42 },
     { "op": "move", "from": "/a/b/c", "path": "/a/b/d" },
     { "op": "copy", "from": "/a/b/d", "path": "/a/b/e" }
   ]

从上述可以看出该方式对应的Content-Type是application/json-patch+json;该语法格式中有三个重要的概念op、path、value;

其中op 必须是 "add", "remove", "replace", "move", "copy", "test"中的其中一个,其他值是非法的。

1、op的简单介绍

  • add
    如果目标数据结构中,有对应key值,则将对应的value值,插入目标值列表中;如果无对应的key值,则新增一个key-value成员;
    == 新加一个对象成员==
    目标JSON document
json 复制代码
   { "foo": "bar"}

JSON Patch document:

json 复制代码
   [
     { "op": "add", "path": "/baz", "value": "qux" }
   ]

结果 JSON document:

json 复制代码
   {
     "baz": "qux",
     "foo": "bar"
   }
  • remove
    ... ...

三 Merge含义简单介绍

对于merge动作来说,一般情况下key值如果相同,则替换更改对应的值;如果key不存在则新增key成员,类似于JSON Merge Patch,但是在不同设计场景中又有所不同

相关推荐
小小测试开发10 小时前
LLM 结构化输出测试:Schema 契约 + 故障注入,让工具调用的 JSON 不再靠重试赌运气
人工智能·json
hasty12 小时前
_proto__ 不是普通键:从 JSON 反序列化看原型污染
安全·json
代码中介商15 小时前
JSON 完全指南:从语法到项目实战
json
名字还没想好☜16 小时前
Go 用 json.Decoder 流式解析大 JSON:边读边处理不爆内存
开发语言·后端·golang·go·json
Lhappy嘻嘻17 小时前
网络(六)|应用层 HTTP&HTTPS:URL、请求响应、Cookie 与证书
网络·http·https
gf132111117 小时前
【python_发送飞书卡片消息_直接组装JSON格式发送卡片】
python·json·飞书
有梦想的咕噜20 小时前
Newtonsoft.Json (Json.NET) 常用方法汇总
linux·json·.net
ControlRookie2 天前
第23篇_源码加更 05|HTTP Server、连接实例和诊断数据
http·codesys·plc通信·开源源码
企业数字化笔记2 天前
AI写的网站一直自动跳转怎么办?301、302和HTTPS重定向排查
网络协议·http·https
那年窗外下的雪.2 天前
AIDC 学习日志|第 24 天|设备输出反推与 MAC Flapping 定位
网络协议·学习·tcp/ip·http·macos·tcpdump