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

相关推荐
NeilYuen16 小时前
实现TCP发送HTTP请求
网络协议·tcp/ip·http
wuhuhuan20 小时前
Day17:HTTP 接口测试与链式调用 — sendRequest 从入门到实战
网络·网络协议·http
烟锁池塘柳020 小时前
Conda 创建环境报错:Unable to read repodata JSON file,清华源 pkgs/free 失效解决方法
json·conda
执笔画流年呀20 小时前
网络原理(http)(https)
网络·http·https
llllll15221 小时前
HTTP协议全解:从报文结构到HTTPS加密原理
网络协议·http·https
云水一下2 天前
零基础玩转bWAPP靶场(四十五):XSS - Reflected (JSON)
web安全·json·xss·bwapp·reflected
iLogIng2 天前
基于 Boost 的静态 HTTP 服务器
http
iLogIng2 天前
基于 Boost 的 HTTP 服务器:框架设计
http
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ3 天前
Spring‑AI Document 对象 JSON 字段详解
人工智能·spring·json