summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Kehoe <ben@kehoe.io>2022-02-20 13:39:45 -0700
committerBen Kehoe <ben@kehoe.io>2022-02-20 13:39:45 -0700
commit66ec8f71ac52384cc61d1db88672a86903671de4 (patch)
tree5537b07075ba4073d3d840a972ff03b0273f93ce
parent896102d605605ec0f48e26bafb54fb591be66ede (diff)
downloadpython-json-pointer-66ec8f71ac52384cc61d1db88672a86903671de4.tar.gz
Support setting - for arrays
-rw-r--r--jsonpointer.py6
-rwxr-xr-xtests.py11
2 files changed, 16 insertions, 1 deletions
diff --git a/jsonpointer.py b/jsonpointer.py
index 53191ef..d353632 100644
--- a/jsonpointer.py
+++ b/jsonpointer.py
@@ -225,7 +225,11 @@ class JsonPointer(object):
(parent, part) = self.to_last(doc)
- parent[part] = value
+ if isinstance(parent, Sequence) and part == '-':
+ parent.append(value)
+ else:
+ parent[part] = value
+
return doc
@classmethod
diff --git a/tests.py b/tests.py
index 409990e..4fefd9f 100755
--- a/tests.py
+++ b/tests.py
@@ -193,6 +193,12 @@ class SetTests(unittest.TestCase):
newdoc = set_pointer(doc, "/foo/1", "cod", inplace=False)
self.assertEqual(resolve_pointer(newdoc, "/foo/1"), "cod")
+ self.assertEqual(len(doc["foo"]), 2)
+ newdoc = set_pointer(doc, "/foo/-", "xyz", inplace=False)
+ self.assertEqual(resolve_pointer(newdoc, "/foo/2"), "xyz")
+ self.assertEqual(len(doc["foo"]), 2)
+ self.assertEqual(len(newdoc["foo"]), 3)
+
newdoc = set_pointer(doc, "/", 9, inplace=False)
self.assertEqual(resolve_pointer(newdoc, "/"), 9)
@@ -209,6 +215,11 @@ class SetTests(unittest.TestCase):
set_pointer(doc, "/foo/1", "cod")
self.assertEqual(resolve_pointer(doc, "/foo/1"), "cod")
+ self.assertEqual(len(doc["foo"]), 2)
+ set_pointer(doc, "/foo/-", "xyz")
+ self.assertEqual(resolve_pointer(doc, "/foo/2"), "xyz")
+ self.assertEqual(len(doc["foo"]), 3)
+
set_pointer(doc, "/", 9)
self.assertEqual(resolve_pointer(doc, "/"), 9)