Japan
JSON patcher
Pull requests are very welcome!
Install
$ npm install [-g] japan
Features
- Patches any JSON input with a series of patches contained in files.
Documentation
Usage
$ jp [options] patch.json [...patches] < data.json
Options
Information
Examples
Options ### jp --pretty | -p
Pretty prints resulting data JSON.
Information ### Patch format
The patches consist on an array of operations, each one contained in another array:
<path> <operation> <argument> <path> <operation> <argument> ...
path
- A path in data object to operate. Supports dot notation, like "a.b.c" or "a.b.0".operation
- One of the implemented operations.argument
- Argument for the operation.
### Operations
fetch()
- Returns value stored on the selected path.put(value)
- Addsvalue
to the selected path, creating parent objects as needed.remove()
- Removes key and contents stored on the selected path.move(
path)
- Moves contents to givenpath
, removing them from the selected path.copy(
path)
- Copy contents to givenpath
.
### Library usage
This module also provides a class for using in your Node.js application.
var Patcheable = Patcheable; var data = ; // Example data object // Patcheable.prototype.getKey(path)// Used to get mutable slices of data object on selected path// NOTE: Throws error if key is not accessibleconsole; // { root: { b: 2 }, value: 'b' } // Patcheable.prototype.makeKey(path)// Used to generate mutable slices of data object on selected pathconsole; // { root: { z: {} }, value: 'z' } // Common operationsconsole; // { b: 2 }console; // 3console; // 2console; // 3console; // 3 // You can use data as a normal objectconsole; // '{"a":{"b":2}}'
Examples ### Serial patching
$ echo '{"a":1,"c":2}' > data.json$ echo '[["d.f", "put", 4], ["c", "move", "a.b.c"]]' > patch1.json$ echo '[["d", "remove"], ["a.b.c", "copy", "d"], ["a.b.c", "put", 5]]' > patch2.json$ jp patch1.json patch2.json < data.json {"a":{"b":{"c":5}},"d":2}