Library to apply JSON Patches in JavaScript
- JSON Patch - http://tools.ietf.org/html/rfc6902
- JSON Pointer - http://tools.ietf.org/html/rfc6901
jsonpatch-js works as in the browser as a script, as a Node module and as an AMD module.
Bower
bower install json-patch
NPM
npm install json-patch
Note: at this time, all operations are applied in-place.
jsonpatch.apply(document, patch)
Applies a patch to the document
jsonpatch.compile(patch)
Compiles a patch and returns a function that takes a document to apply the patch to.
Patch syntax: {op: 'add', path: <path>, value: <value>}
// Add property, result: {foo: 'bar'}
jsonpatch.apply({}, [{op: 'add', path: '/foo', value: 'bar'}]);
// Add array element, result: {foo: [1, 2, 3]}
jsonpatch.apply({foo: [1, 3]}, [{op: 'add', path: '/foo/1', value: 2}]);
// Complex, result: {foo: [{bar: 'baz'}]}
jsonpatch.apply({foo: [{}]}, [{op: 'add', path: '/foo/0/bar', value: 'baz'}]);
Patch syntax: {op: 'remove', path: <path>}
// Remove property, result: {}
jsonpatch.apply({foo: 'bar'}, [{op: 'remove', path: '/foo'}]);
// Remove array element, result: {foo: [1, 3]}
jsonpatch.apply({foo: [1, 2, 3]}, [{op: 'remove', path: '/foo/1'}]);
// Complex, result: {foo: [{}]}
jsonpatch.apply({foo: [{bar: 'baz'}]}, [{op: 'remove', path: '/foo/0/bar'}]);
Patch syntax: {op: 'replace', path: <path>, value: <value>}
// Replace property, result: {foo: 1}
jsonpatch.apply({foo: 'bar'}, [{op: 'replace', path: '/foo', value: 1}]);
// Replace array element, result: {foo: [1, 4, 3]}
jsonpatch.apply({foo: [1, 2, 3]}, [{op: 'replace', path: '/foo/1', value: 4}]);
// Complex, result: {foo: [{bar: 1}]}
jsonpatch.apply({foo: [{bar: 'baz'}]}, [{op: 'replace', path: '/foo/0/bar', value: 1}]);
Patch syntax: {op: 'move', from: <path>, path: <path>}
// Move property, result {bar: [1, 2, 3]}
jsonpatch.apply({foo: [1, 2, 3]}, [{op: 'move', from: '/foo', path: '/bar'}]);
Patch syntax: {op: 'copy', from: <path>, path: <path>}
// Copy property, result {foo: [1, 2, 3], bar: 2}
jsonpatch.apply({foo: [1, 2, 3]}, [{op: 'copy', from: '/foo/1', path: '/bar'}]);
Patch syntax: {op: 'test', path: <path>, value: <value>}
// Test equality of property to value, result: true
jsonpatch.apply({foo: 'bar'}, [{op: 'test', path: '/foo', value: 'bar'}]
Changed in 0.5.0
The return value is no longer a boolean, but now the the document itself which adheres correctly to the specification. It the test fails, a PatchTestFailed
error will be thrown.
JSONPatchError
Base error type which all patch errors extend from.
InvalidPointerError
Thrown when the pointer is invalid.
InvalidPatchError
Thrown when the patch itself has an invalid syntax.
PatchConflictError
Thrown when there is a conflic with applying the patch to the document.
PatchTestFailed
Thrown when a test operation is applied and fails.