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,但是在不同设计场景中又有所不同

相关推荐
丨白色风车丨4 小时前
Python中JSON与字典/列表的相互转换详解
windows·python·json
深蓝电商API14 小时前
HTTP/2 协议逆向:从 Fiddler 抓不到包说起
爬虫·网络协议·http·fiddler
fthux16 小时前
开源小工具 Who Arrives:看看你的公网 IP、地区、时区和网络
http·开源·github
鱼宵21 小时前
LangChain4j 结构化输出:让模型吐出 Java 对象,JSON 不再手写解析
java·开发语言·json·langchain4j
leisoo80971 天前
融资融券数据怎么查两融指标含义与杠杆观察方法 IG50免费开源股票数据API接口
开发语言·jvm·数据库·python·json
程序员z71 天前
【从0开始学计算机网络】| HTTP 协议的进化史
网络协议·计算机网络·http
长按助力退休2 天前
HTTP缓存从强缓存到协商缓存,前端性能优化第一步
http
胖头鱼的鱼缸(尹海文)3 天前
胖头鱼的技术专栏-474 从能跑到能上线:PG SplitJSON 0.2.0 和 0.1.0 差在哪(20261008)
postgresql·json
谢亮_vipxieliang3 天前
Go net/http 标准库深入——构建生产级 HTTP 服务
http·golang·iphone