Package Exports
- fast-json-patch
- fast-json-patch/src/json-patch
- fast-json-patch/src/json-patch-duplex
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (fast-json-patch) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
JSON-Patch
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.
Why you should use JSON-Patch
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.
Footprint
0.5 KB minified and gzipped (1.1 KB minified)
Performance
Features
- 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.
Roadmap
- A /bin directory will be added with minified versions
- More unit tests
Adding to your project
In a web browser
Include json-patch.js
if you want support for applying patches or
include json-patch-duplex.js
if you also want to generate patches.
In Node.js
Add fast-json-patch
to dependencies list in your project's package.json
, then run npm install
. After installation, you are ready to go with require:
var jsonpatch = require('fast-json-patch')
Usage
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/0", 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].number = "123";
myobj.contactDetails.phoneNumbers.push({number:"456"});
var patches = jsonpatch.generate(observer);
// patches == [
// { op:"replace", path="/firstName", value:"Albert"},
// { op:"replace", path="/contactDetails/phoneNumbers/0/number", value:"123"},
// { op:"add", path="/contactDetails/phoneNumbers/1", value:{number:"456"}}];
Testing
In a web browser
- 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.
In Node.js
- 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