json8-pointer
v1.0.6
Published
JSON Pointer toolkit for JavaScript
Downloads
20,021
Readme
JSON8 Pointer
Introduction
JSON Pointer RFC 6901 toolkit for JavaScript.
See also JSON8 Patch for more methods to work with JSON pointers.
Getting started
npm install json8-pointer
const pointer = require("json8-pointer");
Methods
find
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
context
Returns the target parent and target property of a pointer.
var doc = { foo: { bar: "foobar" } };
pointer.context(doc, "/foo/bar");
// ['bar', doc.foo]
encode
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'
serialize
Alias for the encode method.
escape
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'
decode
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'];
prototype pollution
decode
will throw with an error if prototype pollution is attempted.
parse
Alias for the decode method.
unescape
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
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`
index
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'
// }
dict
Just like index but only indexes primitives.
pointer.dict(['hello', 'earth'])
// {
// '/0': 'hello',
// '/1': 'earth'
// }
pointer.dict({'foo', 'bar'})
// {
// '/foo': 'bar'
// }
flatten
The flatten
method works like a flat version of index.
pointer.flatten(["hello", "earth"]);
// {
// '': [],
// '/0': 'hello',
// '/1': 'earth'
// }
unflatten
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']
compile
The compile
method takes a pointer and returns a function that accept a document and returns the value at the location of the pointer.
const getAge = pointer.compile("/age");
getAge({ age: 22 }); // 22