jsonpatch介绍

什么是JSON Patch?

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

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

  • 官网:http://jsonpatch.com/
  • github:https://github.com/dharmafly/jsonpatch.com

看一个示例:

原始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

  • jsonpatch.js
  • jsonpatch-js
  • jiff
  • Fast-JSON-Patch
  • JSON8 Patch
  • JSON Patch Utils

Python

  • python-json-patch

PHP

  • json-patch-php
  • php-jsonpatch/php-jsonpatch
  • xp-forge/json-patch
  • JSONPatch
  • swaggest/json-diff

Ruby

  • json_tools
  • json_patch
  • hana

Perl

  • perl-json-patch

C

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

Java

  • zjsonpatch (推荐
  • json-patch   (推荐
  • bsonpatch (port of zjsonpatch that uses BSON as document model)

Scala

  • diffson

C++

  • JSON for Modern C++
  • jsoncons

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

  • json-patch
  • jsonpatch

Haskell

  • Haskell-JSON-Patch

Erlang

  • json-patch.erl

Elm

  • norpan/elm-json-patch

工具

  • JSON-Gui
  • json-patch-builder-online (推荐
  • json-lab-patcher
  • JSONBuddy editor

 

你可能感兴趣的:(java,web前端)