This package moved to a monorepo. https://github.com/sonnyp/JSON8/tree/master/packages/patch
JSON Pointer RFC 6901 implementation for JavaScript.
See also JSON8 Patch for more methods to work with JSON pointers.
npm install json8-pointer
var pointer = require('json8-pointer');
or
<script src="node_modules/json8-pointer/JSON8Pointer.js"></script>
var pointer = window.JSON8Pointer
Use a JSON Pointer to find a value in a JSON document.
Returns undefined
if the value cannot be found.
var doc = {"foo": {"bar": "foobar"}}
pointer.find(doc, '/foo/bar');
// "foobar"
pointer.find(doc, '/bar/foo');
// undefined
Returns the target parent and target property of a pointer.
var doc = {"foo": {"bar": "foobar"}}
pointer.context(doc, '/foo/bar');
// ['bar', doc.foo]
Takes an array of unescaped tokens (see decode) and return a JSON Pointer string.
pointer.encode(['foo', 'bar', 'hello']);
// '/foo/bar/hello'
pointer.encode(['foo', 'a/b'])
// '/foo/a~1b'
You can specify a different separator than the default /
.
pointer.encode(['foo', 'bar', 'hello'], '.');
// '.foo.bar.hello'
Alias for the encode method.
Escape a single token for use in JSON Pointer.
pointer.escape('a/b')
// 'a~1b'
You can specify a different separator than the default /
.
pointer.escape('a.b', '.')
// 'a~1b'
Takes a JSON Pointer string and return an array of unescaped tokens.
pointer.decode('/foo/bar/hello');
// ['foo', 'bar', 'hello'];
pointer.decode('/foo/a~1b')
// ['foo', 'a/b']
You can specify a different separator than the default /
.
pointer.decode('.foo.bar.hello', '.');
// ['foo', 'bar', 'hello'];
Alias for the decode method.
Unescape a single token see escape.
pointer.unescape('a~1b')
// 'a/b'
You can specify a different separator than the default /
.
pointer.unescape('a~1b', '.')
// 'a/b'
Join a base pointer and tokens;
pointer.join('/foo', ['bar'])
pointer.join(['foo'], 'bar')
pointer.join('', ['foo', 'bar'])
pointer.join([], ['foo', 'bar'])
// `/foo/bar`
You can specify a different separator than the default /
.
pointer.join('/foo', ['bar'], '.')
// `.foo.bar`
The index
method returns an object with all values indexed by pointers.
pointer.index('foo') // {'': 'foo'}
pointer.index(['hello', 'earth'])
// {
// '': ['hello', 'earth'],
// '/0': 'hello',
// '/1': 'earth'
// }
Just like index but only indexes primitives.
pointer.index(['hello', 'earth'])
// {
// '/0': 'hello',
// '/1': 'earth'
// }
pointer.index({'foo', 'bar'})
// {
// '/foo': 'bar'
// }
The flatten
method works like a flat version of index.
pointer.flatten(['hello', 'earth'])
// {
// '': [],
// '/0': 'hello',
// '/1': 'earth'
// }
The unflatten
method takes an flattened object and returns a deep JSON document.
pointer.unflatten({'': 'foo'}) // 'foo'
pointer.unflatten({
'': [],
'/0': 'hello',
'/1': 'earth'
}) // ['hello', 'earth']
npm install -g mocha browserify
npm test
See CONTRIBUTING.md