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

相关推荐
阿巴~阿巴~2 小时前
自定义协议设计与实践:从协议必要性到JSON流式处理
服务器·网络·网络协议·json·操作系统·自定义协议
Awkwardx10 小时前
Linux网络编程—应用层协议HTTP
网络·网络协议·http
Mu.38714 小时前
计算机网络模型
网络·网络协议·计算机网络·安全·http·https
我有一棵树14 小时前
file 协议与 http 协议的区别:为什么本地 HTML 无法加载相对路径 JS,以及正确的解决方式
javascript·http·html
最笨的羊羊18 小时前
Flink CDC系列之:JSON 序列化器JsonRowDataSerializationSchemaUtils
json·flink cdc系列·serialization·json 序列化器·rowdata·schemautils
q***49861 天前
SpringCloud系列教程:微服务的未来 (五)枚举处理器、JSON处理器、分页插件实现
spring cloud·微服务·json
阿珊和她的猫1 天前
HTTP 状态码 301 和 302 的区别与使用场景
网络·网络协议·http
6***94152 天前
报错The default superclass, “jakarta.servlet.http.HttpServlet“(已经配置好tomcat)
http·servlet·tomcat
愤怒的山羊2 天前
jetcache List 缓存, json 序列化 泛型解析成了 JsonObject 处理
缓存·json·list
记得记得就1512 天前
【Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装】
前端·nginx·http