Skip to content
This repository has been archived by the owner on Jun 9, 2019. It is now read-only.

How to Create JSON Patch

mohayonao edited this page Oct 20, 2016 · 1 revision

packages

add to object

test case

const a = { data: { foo: "foo", bar: "bar" } };
const b = { data: { foo: "foo", bar: "bar", baz: "baz" } };

expected

[ { op: "add", path: "/data/baz", value: "baz" } ]

actual

👍 fast-json-patch, json8-patch, jiff, rfc6902

[ { op: "add", path: "/data/baz", value: "baz" } ]

add to array

test case

const a = { data: [ 0, 1, 2, 3 ] };
const b = { data: [ 0, 1, 4, 2, 3 ] };

expected

[ { op: "add", path: "/data/2", value: 4 } ]

actual

👍 rfc6902

[ { op: "add", path: "/data/2", value: 4 } ]

fast-json-patch

[ { op: "replace", path: "/data/3", value: 2 },
  { op: "replace", path: "/data/2", value: 4 },
  { op: "add"    , path: "/data/4", value: 3 } ]

json8-patch

[ { op: "replace", path: "/data", value: [ 0, 1, 4, 2, 3 ] } ]

jiff

[ { op: "add", path: "/data/2", value: 4, context: undefined } ]

remove from object

test case

const a = { data: { foo: "foo", bar: "bar", baz: "baz" } };
const b = { data: { foo: "foo", bar: "bar" } };

expected

[ { op: "remove", path: "/data/baz" } ]

actual

👍 fast-json-patch, json8-patch, rfc6902

[ { op: "remove", path: "/data/baz" } ]

jiff

[ { op: "test"  , path: "/data/baz", value: "baz" },
  { op: "remove", path: "/data/baz" } ]

remove from array

test case

const a = { data: [ 0, 1, 4, 2, 3 ] };
const b = { data: [ 0, 1, 2, 3 ] };

expected

[ { op: "remove", path: "/data/2" } ]

actual

👍 rfc6902

[ { op: "remove", path: "/data/2" } ]

fast-json-patch

[ { op: "remove" , path: "/data/4" },
  { op: "replace", path: "/data/3", value: 3 },
  { op: "replace", path: "/data/2", value: 2 } ]

json8-patch

[ { op: "replace", path: "/data", value: [ 0, 1, 2, 3 ] } ]

jiff

[ { op: "test"  , path: "/data/2", value: 4, context: undefined },
  { op: "remove", path: "/data/2", context: undefined } ]

replace on object

test case

const a = { data: { foo: "foo", bar: "bar" } };
const b = { data: { foo: "foo", bar: "qux" } };

expected

[ { op: "replace", path: "/data/bar", value: "qux" } ]

actual

👍 fast-json-patch, json8-patch, rfc6902

[ { op: "replace", path: "/data/bar", value: "qux" } ]

jiff

[ { op: "test"   , path: "/data/bar", value: "bar" },
  { op: "replace", path: "/data/bar", value: "qux" } ]

replace on array

test case

const a = { data: [ 0, 1, 2, 3 ] };
const b = { data: [ 0, 1, 4, 3 ] };

expected

[ { op: "replace", path: "/data/2", value: 4 } ]

actual

👍 fast-json-patch, rfc6902

[ { op: "replace", path: "/data/2", value: 4 } ]

jiff

[ { op: "add"   , path: "/data/2", value: 4, context: undefined },
  { op: "test"  , path: "/data/3", value: 2, context: undefined },
  { op: "remove", path: "/data/3", context: undefined } ]

json8-patch

[ { op: "replace", path: "/data", value: [ 0, 1, 4, 3 ] } ]