当前位置: 首页 > 工具软件 > JSON Patch > 使用案例 >

jsonpatch介绍

冀望
2023-12-01

什么是JSON Patch?

JSON Patch是一种用于描述对JSON文档所做的更改的格式(JSON Patch本身也是JSON结构)。当只更改了一部分时,可用于避免发送整个文档。可以与HTTP PATCH方法结合使用时,它允许以符合标准的方式对HTTP API进行部分更新。

JSON Patch是在IETF的RFC 6902中指定的。如果了解过linux上的diff、patch,就非常容易理解JSON Patch了,前者是针对普通文本文件的,后者是指针对JSON结构。(前者更通用)

看一个示例:

原始json:

{
  "baz": "qux",
  "foo": "bar"
}

patch:

[
  { "op": "replace", "path": "/baz", "value": "boo" },
  { "op": "add", "path": "/hello", "value": ["world"] },
  { "op": "remove", "path": "/foo" }
]

结果:

{
  "baz": "boo",
  "hello": ["world"]
}

JSON Patch工作原理

JSON Patch是一个包含了一系列补丁操作的JSON文件,JSON修补程序支持的修补程序操作为“add”,“remove”,“replace”,“move”,“copy”和“test”。按顺序应用这些操作:如果其中任何一个失败,则整个补丁操作应中止

1、JSON Pointer:

JSON Pointer(IETF RFC 6901)定义了一种字符串格式,用于标识JSON文档中的特定值。 JSON Patch中的所有操作都使用它来指定要操作的文档部分。

1)JSON Point是一串由“/”分隔的字符串,这些令牌要么指定对象中的键,要么指定数组的索引。例如,给定json:

{
  "biscuits": [
    { "name": "Digestive" },
    { "name": "Choco Leibniz" }
  ]
}
  • /biscuits:指向了数组biscuits;
  • /biscuits/1/name:指向了值"Choco Leibniz".

2)使用空字符串指向json的root节点,不能使用“/”,因为“/”指向了root节点下的一个“”key。

3)可以使用“-”指向数组的最后元素,例如:/biscuits/-

2、Operations:

在JSON Patch中包含了add、remove、replace、copy、move、test五种操作。

JSON Patch 库

目前JSON Patch支持多种开发语言。在使用前需要检查该库是否支持RFC版本的JSON Patch,因为与早期的草稿版本有所不同,并且在撰写本文时,并非所有库都已更新。

JavaScript

Python

PHP

Ruby

Perl

C

  • cJSON (JSON library in C, includes JSON Patch support in cJSON_Utils)

Java

Scala

C++

C#

  • Asp.Net Core JsonPatch (Microsoft official implementation)
  • Ramone (a framework for consuming REST services, includes a JSON Patch implementation)
  • JsonPatch (Adds JSON Patch support to ASP.NET Web API)
  • Starcounter (In-memory Application Engine, uses JSON Patch with OT for client-server sync)
  • Nancy.JsonPatch (Adds JSON Patch support to NancyFX)
  • Manatee.Json (JSON-everything, including JSON Patch)

Go

Haskell

Erlang

Elm

工具

应用

通过JSON Patch可以获取两个json文档的diff信息,并且可以将这个diff信息作为patch应用到其中一个json文档中。例如:https://www.thinbug.com/q/48436801

 

 类似资料: