jsonpatch.js
Library to apply JSON Patches in JavaScript
http://tools.ietf.org/html/draft-ietf-appsawg-json-patch-03
For convenience, jsonpatch.apply
can take a patch as an object
or an array of objects. The spec states the latter as being the official
patch syntax.
Note: all operations are applied in-place.
Add
Patch syntax: {add: <path>, value: <value>}
jsonpatch.apply({}, [{add: '/foo', value: 'bar'}]);
jsonpatch.apply({foo: [1, 3]}, [{add: '/foo/1', value: 2}]);
jsonpatch.apply({foo: [{}]}, [{add: '/foo/0/bar', value: 'baz'}]);
Remove
Patch syntax: {remove: <path>}
jsonpatch.apply({foo: 'bar'}, [{remove: '/foo'}]);
jsonpatch.apply({foo: [1, 2, 3]}, [{remove: '/foo/1'}]);
jsonpatch.apply({foo: [{bar: 'baz'}]}, [{remove: '/foo/0/bar'}]);
Replace
Patch syntax: {replace: <path>, value: <value>}
jsonpatch.apply({foo: 'bar'}, [{replace: '/foo', value: 1}]);
jsonpatch.apply({foo: [1, 2, 3]}, [{replace: '/foo/1', value: 4}]);
jsonpatch.apply({foo: [{bar: 'baz'}]}, [{replace: '/foo/0/bar', value: 1}]);
Move
Patch syntax: {move: <path>, to: <path>}
jsonpatch.apply({foo: [1, 2, 3]}, [{move: '/foo', to: '/bar'}]);
Copy
Patch syntax: {copy: <path>, to: <path>}
jsonpatch.apply({foo: [1, 2, 3]}, [{copy: '/foo/1', to: '/bar'}]);
Test
Patch syntax: {test: <path>, value: <value>}
jsonpatch.apply({foo: 'bar'}, [{test: '/foo', value: 'bar'}]