3 [![Build Status](https://travis-ci.org/appscode/jsonpatch.svg?branch=master)](https://travis-ci.org/appscode/jsonpatch)
4 [![Go Report Card](https://goreportcard.com/badge/appscode/jsonpatch "Go Report Card")](https://goreportcard.com/report/appscode/jsonpatch)
5 [![GoDoc](https://godoc.org/github.com/appscode/jsonpatch?status.svg "GoDoc")](https://godoc.org/github.com/appscode/jsonpatch)
7 As per http://jsonpatch.com JSON Patch is specified in RFC 6902 from the IETF.
9 JSON Patch allows you to generate JSON that describes changes you want to make to a document, so you don't have to send the whole doc. JSON Patch format is supported by HTTP PATCH method, allowing for standards based partial updates via REST APIs.
12 go get github.com/appscode/jsonpatch
15 I tried some of the other "jsonpatch" go implementations, but none of them could diff two json documents and
16 generate format like jsonpatch.com specifies. Here's an example of the patch format:
20 { "op": "replace", "path": "/baz", "value": "boo" },
21 { "op": "add", "path": "/hello", "value": ["world"] },
22 { "op": "remove", "path": "/foo"}
26 The API is super simple
35 "github.com/appscode/jsonpatch"
38 var simpleA = `{"a":100, "b":200, "c":"hello"}`
39 var simpleB = `{"a":100, "b":200, "c":"goodbye"}`
42 patch, e := jsonpatch.CreatePatch([]byte(simpleA), []byte(simpleA))
44 fmt.Printf("Error creating JSON patch:%v", e)
47 for _, operation := range patch {
48 fmt.Printf("%s\n", operation.Json())
53 This code needs more tests, as it's a highly recursive, type-fiddly monster. It's not a lot of code, but it has to deal with a lot of complexity.