diff options
author | Ben Kehoe <ben@kehoe.io> | 2022-02-20 13:39:45 -0700 |
---|---|---|
committer | Ben Kehoe <ben@kehoe.io> | 2022-02-20 13:39:45 -0700 |
commit | 66ec8f71ac52384cc61d1db88672a86903671de4 (patch) | |
tree | 5537b07075ba4073d3d840a972ff03b0273f93ce | |
parent | 896102d605605ec0f48e26bafb54fb591be66ede (diff) | |
download | python-json-pointer-66ec8f71ac52384cc61d1db88672a86903671de4.tar.gz |
Support setting - for arrays
-rw-r--r-- | jsonpointer.py | 6 | ||||
-rwxr-xr-x | tests.py | 11 |
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 @@ -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) |