介绍
json-patch是Java编写的RFC 6902(JSON Patch)和RFC 7386(JSON Merge Patch)的实现,其核心使用Jackson(2.2.x)。github地址:https://github.com/java-json-tools/json-patch
功能描述:
- 支持全部的RFC 6902 operations,包括test;
 - 带有operations分解的JSON diff(仅RFC 6902)。
 
示例
maven pom.xml:
<dependency>
    <groupId>com.github.java-json-tools</groupId>
    <artifactId>json-patch</artifactId>
    <version>yourVersionHere</version>
</dependency>当前版本是1.13,也可以在github 上的release上找对应的版本:https://github.com/java-json-tools/json-patch/releases
1、获取json diff信息作为patch:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.fge.jsonpatch.JsonPatch;
import com.github.fge.jsonpatch.diff.JsonDiff;
public class PatchTest3 {
    private static final ObjectMapper mapper = new ObjectMapper();
    private static String json1 = "{\"a\":0,\"b\":[1,2]}";
    private static String json2 = "{\"b\": [1,2,0]} ";
    public static void main(String[] args) throws IOException {
        
        //JsonPatch patch = JsonDiff.asJsonPatch(source, target);
        JsonPatch patch = JsonDiff.asJsonPatch(mapper.readTree(json1), mapper.readTree(json2));
        System.out.println(patch.toString()); 
    }
}输出:[op: move; from: "/a"; path: "/b/-"]
2、应用patch:
public class PatchTest3 {
    private static final ObjectMapper mapper = new ObjectMapper();
    private static String json1 = "{\"a\":0,\"b\":[1,2]}";
    private static String json2 = "{\"b\": [1,2,0]} ";
    public static void main(String[] args) throws Exception {
        
        //JsonPatch patch = JsonDiff.asJsonPatch(source, target);
        JsonPatch patch = JsonDiff.asJsonPatch(mapper.readTree(json1), mapper.readTree(json2));
        //System.out.println(patch.toString()); 
        
        
        JsonNode apply = patch.apply(mapper.readTree(json1));
        System.out.println(apply.toPrettyString());
    }
}输出:{"b":[1,2,0]}
3、json-patch和zjsonpatch库对比:
介绍了zjsonpatch库,对比二者的区别:
- 前者支持关闭move、copy operations,json-patch这个库不支持关闭;(见github的issue:https://github.com/java-json-tools/json-patch/issues)
 - json-patch返回的diff信息直接就是jsonPatch对象,而不是JSONNode
 

综上来看,还是推荐使用zjsonpatch
                










