Skip to content

Commit 66ec8f7

Browse files
committed
Support setting - for arrays
1 parent 896102d commit 66ec8f7

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

jsonpointer.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,11 @@ def set(self, doc, value, inplace=True):
225225

226226
(parent, part) = self.to_last(doc)
227227

228-
parent[part] = value
228+
if isinstance(parent, Sequence) and part == '-':
229+
parent.append(value)
230+
else:
231+
parent[part] = value
232+
229233
return doc
230234

231235
@classmethod

tests.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,12 @@ def test_set(self):
193193
newdoc = set_pointer(doc, "/foo/1", "cod", inplace=False)
194194
self.assertEqual(resolve_pointer(newdoc, "/foo/1"), "cod")
195195

196+
self.assertEqual(len(doc["foo"]), 2)
197+
newdoc = set_pointer(doc, "/foo/-", "xyz", inplace=False)
198+
self.assertEqual(resolve_pointer(newdoc, "/foo/2"), "xyz")
199+
self.assertEqual(len(doc["foo"]), 2)
200+
self.assertEqual(len(newdoc["foo"]), 3)
201+
196202
newdoc = set_pointer(doc, "/", 9, inplace=False)
197203
self.assertEqual(resolve_pointer(newdoc, "/"), 9)
198204

@@ -209,6 +215,11 @@ def test_set(self):
209215
set_pointer(doc, "/foo/1", "cod")
210216
self.assertEqual(resolve_pointer(doc, "/foo/1"), "cod")
211217

218+
self.assertEqual(len(doc["foo"]), 2)
219+
set_pointer(doc, "/foo/-", "xyz")
220+
self.assertEqual(resolve_pointer(doc, "/foo/2"), "xyz")
221+
self.assertEqual(len(doc["foo"]), 3)
222+
212223
set_pointer(doc, "/", 9)
213224
self.assertEqual(resolve_pointer(doc, "/"), 9)
214225

0 commit comments

Comments
 (0)