From 66ec8f71ac52384cc61d1db88672a86903671de4 Mon Sep 17 00:00:00 2001 From: Ben Kehoe Date: Sun, 20 Feb 2022 13:39:45 -0700 Subject: Support setting - for arrays --- jsonpointer.py | 6 +++++- tests.py | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) 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) -- cgit v1.2.1