diff options
Diffstat (limited to 'jsonpointer.py')
-rw-r--r-- | jsonpointer.py | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/jsonpointer.py b/jsonpointer.py index 101388e..2749bbd 100644 --- a/jsonpointer.py +++ b/jsonpointer.py @@ -47,7 +47,10 @@ class JsonPointerException(Exception): pass -def resolve_pointer(doc, pointer): +_nothing = object() + + +def resolve_pointer(doc, pointer, default=_nothing): """ Resolves pointer against doc and returns the referenced object @@ -67,10 +70,14 @@ def resolve_pointer(doc, pointer): >>> resolve_pointer(obj, '/foo/anArray/0') == obj['foo']['anArray'][0] True + + >>> resolve_pointer(obj, '/some/path', None) == None + True + """ pointer = JsonPointer(pointer) - return pointer.resolve(doc) + return pointer.resolve(doc, default) class JsonPointer(object): @@ -84,11 +91,18 @@ class JsonPointer(object): self.parts = map(urllib.unquote, parts) - def resolve(self, doc): + def resolve(self, doc, default=_nothing): """Resolves the pointer against doc and returns the referenced object""" for part in self.parts: - doc = self.walk(doc, part) + + try: + doc = self.walk(doc, part) + except JsonPointerException: + if default is _nothing: + raise + else: + return default return doc |