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

JSONPatch | FastJson之JSONPatch使用

谭泳
2023-12-01

一、介绍

  • JSON Patch是一种描述JSON文档更改的格式。
  • 当只更改了一部分时,可用于避免发送整个文档,当与HTTP PATCH方法结合使用时,它允许以符合标准的方式对HTTP API进行部分更新。
  • JSON Patch本身就是JSON文档。
  • 在fastjson 1.2.71版本后,支持JSONPatch ( http://jsonpatch.com/ ).

二、为什么使用JsonPatch

JSON Patch的一大优势在于它的请求操作体很小,只发送对象的更改内容。相对要谨慎一点,只更新请求的内容。

三、常见四大操作

  • Add 向 JSON 对象中添加一对 key - value,或者向 Json Array 中加个元素。
  • Move 把某个节点从一个地方移到另一个地方。
  • Replace 替换,比如把 city 的值从“广州”改为“珠海”。
  • Remove 删除 JSON 对象中的某对 key - value,或者从 Json Array 中删除一个元素。
  • copy 复制,将值从JSON文档中的一个位置复制到另一个位置。这两个from和path是JSON指针。

{ "op": "copy", "from": "/biscuits/0", "path": "/best_biscuit" }

  • test 测试是否在文档中设置了指定的值。如果测试失败,则整个补丁都不适用。 

{ "op": "test", "path": "/best_biscuit/name", "value": "Choco Leibniz" }

原始文件
{
  "baz": "qux",
  "foo": "bar"
}
补丁
[
  { "op": "replace", "path": "/baz", "value": "boo" },
  { "op": "add", "path": "/hello", "value": ["world"] },
  { "op": "remove", "path": "/foo" }
]
结果
{
  "baz": "boo",
  "hello": ["world"]
}

四、API

package com.alibaba.fastjson;

public class JSONPatch {
     public static String apply(String original, String patch);
     public static Object apply(Object object, String patch);
}

五、DEMO

JSONPatch执行了三个操作:

  1. replace:将key为"baz"的值"qux"替换为"boo"
  2. add:添加JSON对象(key为"hello",value为"world")
  3. remove:删除了JSON对象(key为"foo")
String original = "{\n" +
        "  \"baz\": \"qux\",\n" +
        "  \"foo\": \"bar\"\n" +
        "}";

String patch = "[\n" +
        "  { \"op\": \"replace\", \"path\": \"/baz\", \"value\": \"boo\" },\n" +
        "  { \"op\": \"add\", \"path\": \"/hello\", \"value\": [\"world\"] },\n" +
        "  { \"op\": \"remove\", \"path\": \"/foo\" }\n" +
        "]";

String result = JSONPatch.apply(original, patch);
assertEquals("{\"baz\":\"boo\",\"hello\":[\"world\"]}", result);

参考资料:

FastJSON的JSONPatch介绍:https://github.com/alibaba/fastjson/wiki/jsonpatch

 类似资料: