# The `jsonpointer` module

Identify specific nodes in a JSON document (RFC 6901)

class jsonpointer.EndOfList(list_)

  Result of accessing element “-” of a list

class jsonpointer.JsonPointer(pointer)

  A JSON Pointer that can reference parts of a JSON document

  contains(ptr)

    Returns True if self contains the given ptr

  classmethod from_parts(parts)

    Constructs a JsonPointer from a list of (unescaped) paths

        >>> JsonPointer.from_parts(['a', '~', '/', 0]).path == '/a/~0/~1/0'
        True

  get(doc, default=<object object>)

    Resolves the pointer against doc and returns the referenced object

  classmethod get_part(doc, part)

    Returns the next step in the correct type

  get_parts()

    Returns the list of the parts. For example, JsonPointer(‘/a/b’).get_parts() == [‘a’, ‘b’]

  join(suffix)

    Returns a new JsonPointer with the given suffix append to this ptr

  property path

    Returns the string representation of the pointer

        >>> ptr = JsonPointer('/~0/0/~1').path == '/~0/0/~1'

  resolve(doc, default=<object object>)

    Resolves the pointer against doc and returns the referenced object

  set(doc, value, inplace=True)

    Resolve the pointer against the doc and replace the target with value.

  to_last(doc)

    Resolves ptr until the last step, returns (sub-doc, last-step)

  walk(doc, part)

    Walks one step in doc and returns the referenced part

exception jsonpointer.JsonPointerException

jsonpointer.pairwise(iterable)

  Transforms a list to a list of tuples of adjacent items

  s -> (s0,s1), (s1,s2), (s2, s3), …

      >>> list(pairwise([]))
      []

      >>> list(pairwise([1]))
      []

      >>> list(pairwise([1, 2, 3, 4]))
      [(1, 2), (2, 3), (3, 4)]

jsonpointer.resolve_pointer(doc, pointer, default=<object object>)

  Resolves pointer against doc and returns the referenced object

      >>> obj = {'foo': {'anArray': [ {'prop': 44}], 'another prop': {'baz': 'A string' }}, 'a%20b': 1, 'c d': 2}

      >>> resolve_pointer(obj, '') == obj
      True

      >>> resolve_pointer(obj, '/foo') == obj['foo']
      True

      >>> resolve_pointer(obj, '/foo/another prop') == obj['foo']['another prop']
      True

      >>> resolve_pointer(obj, '/foo/another prop/baz') == obj['foo']['another prop']['baz']
      True

      >>> resolve_pointer(obj, '/foo/anArray/0') == obj['foo']['anArray'][0]
      True

      >>> resolve_pointer(obj, '/some/path', None) == None
      True

      >>> resolve_pointer(obj, '/a b', None) == None
      True

      >>> resolve_pointer(obj, '/a%20b') == 1
      True

      >>> resolve_pointer(obj, '/c d') == 2
      True

      >>> resolve_pointer(obj, '/c%20d', None) == None
      True

jsonpointer.set_pointer(doc, pointer, value, inplace=True)

  Resolves pointer against doc and sets the value of the target within doc.

  With inplace set to true, doc is modified as long as pointer is not the root.

      >>> obj = {'foo': {'anArray': [ {'prop': 44}], 'another prop': {'baz': 'A string' }}}

      >>> set_pointer(obj, '/foo/anArray/0/prop', 55) ==     {'foo': {'another prop': {'baz': 'A string'}, 'anArray': [{'prop': 55}]}}
      True

      >>> set_pointer(obj, '/foo/yet another prop', 'added prop') ==     {'foo': {'another prop': {'baz': 'A string'}, 'yet another prop': 'added prop', 'anArray': [{'prop': 55}]}}
      True

      >>> obj = {'foo': {}}
      >>> set_pointer(obj, '/foo/a%20b', 'x') ==     {'foo': {'a%20b': 'x' }}
      True