japan
v0.0.2
Published
JSON patcher
Downloads
14
Readme
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
Pretty prints resulting data JSON.
Information
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.
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
.
This module also provides a class for using in your Node.js application.
var Patcheable = require('japan').Patcheable;
var data = Patcheable({"a":{"b":2},"c":2}); // 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 accessible
console.log(data.getKey("a.b")); // { root: { b: 2 }, value: 'b' }
// Patcheable.prototype.makeKey(path)
// Used to generate mutable slices of data object on selected path
console.log(data.getKey("a.c.x.z")); // { root: { z: {} }, value: 'z' }
// Common operations
console.log(data.fetch("a")); // { b: 2 }
console.log(data.put("a.c", 3)); // 3
console.log(data.copy("c", "a.b")); // 2
console.log(data.move("a.c", "c")); // 3
console.log(data.remove("c")); // 3
// You can use data as a normal object
console.log(JSON.stringify(data)); // '{"a":{"b":2}}'
Examples
$ 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}