A leaner and meaner implementation of JSON-Patch. Small footprint. High performance. Also support dual directions! I.e. you can both apply patches and generate patches.
JSON-Patch (RFC6902) is a new standard format that allows you to update a JSON document by sending the changes rather than the whole document. JSON Patch plays well with the HTTP PATCH verb (method) and REST style programming.
Mark Nottingham has a nice blog about it.
0.5 KB minified and gzipped (1.1 KB minified)
- Allows you to apply patches on object trees for incoming traffic.
- Allows you to freely manipulate object trees and then generate patches for outgoing traffic.
- ES6/7 Object.observe() is used when available.
- A /bin directory will be added with minified versions
- More unit tests
Include json-patch.js
if you want support for applying patches or
include json-patch-duplex.js
if you also want to generate patches.
Applying patches:
var myobj = { firstName:"Albert", contactDetails: { phonenumbers: [ ] } };
var patches = [
{op:"replace", path:"/firstName", value:"Joachim" },
{op:"add", path:"/lastName", value:"Wester" }
{op:"add", path:"/contactDetails/phonenumbers", value:{ number:"555-123" } }
];
jsonpatch.apply( myobj, patches );
// myobj == { firstName:"Joachim", lastName:"Wester", contactDetails:{ phoneNumbers[ {number:"555-123"} ] } };
Generating patches:
var myobj = { firstName:"Joachim", lastName:"Wester", contactDetails: { phonenumbers: [ { number:"555-123" }] } };
observer = jsonpatch.observe( myobj );
myobj.firstName = "Albert";
myobj.contactDetails.phonenumbers[0] = "123";
myobj.contactDetails.phonenumbers.push({number:"456"});
jsonpatch.generate(observer);
// patches == [
// { op:"replace", path="/firstName", value:"Albert"},
// { op:"replace", path="/contactDetails/phonenumbers/0", value:"123"},
// { op:"add", path="/contactDetails/phonenumbers", value:{number:"456"}}];
- Testing json-patch.js
- Load
src/patchtest.html
in your web browser
- Testing json-patch-duplex.js
- Load
src/test-duplex.html
in your web browser
Each of the test suite files contains Jasmine unit test suite and JSLitmus performance test suite.
To run JSLitmus performance tests, press "Run Tests" button.
- Go to directory where you have cloned the repo
- Install Jasmine Node.js module by running command
npm install jasmine-node -g
- Testing json-patch.js
- Run command
jasmine-node --matchall --config duplex no src/test.js
- Testing json-patch-duplex.js
- Run command
jasmine-node --matchall --config duplex yes src/test.js src/test-duplex.js