Skip to content
This repository has been archived by the owner on Mar 6, 2018. It is now read-only.

JSON8/pointer

Repository files navigation

IMPORTANT

This package moved to a monorepo. https://github.com/sonnyp/JSON8/tree/master/packages/patch


JSON8 Pointer

build status

JSON Pointer RFC 6901 implementation for JavaScript.

See also JSON8 Patch for more methods to work with JSON pointers.

Getting started

npm install json8-pointer


var pointer = require('json8-pointer');

or

<script src="node_modules/json8-pointer/JSON8Pointer.js"></script>
var pointer = window.JSON8Pointer

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'];

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

demo/playground

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

demo/playground

Just like index but only indexes primitives.

pointer.index(['hello', 'earth'])
//  {
//    '/0': 'hello',
//    '/1': 'earth'
//  }

pointer.index({'foo', 'bar'})
//  {
//    '/foo': 'bar'
//  }

flatten

demo/playground

The flatten method works like a flat version of index.

pointer.flatten(['hello', 'earth'])
//  {
//    '': [],
//    '/0': 'hello',
//    '/1': 'earth'
//  }

unflatten

demo/playground

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']

Tests

npm install -g mocha browserify
npm test

Contributing

See CONTRIBUTING.md