Skip to content

Commit 9b25b5c

Browse files
mtharrisonmarcbachmann
authored andcommitted
Support 'null' as a valid value to set as a property, use 'undefined' for undefined props (#27)
1 parent bc72857 commit 9b25b5c

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

jsonpointer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ function setter (obj, pointer, value) {
3939
}
4040

4141
var oldValue = obj[part]
42-
if (value === null) delete obj[part]
42+
if (value === undefined) delete obj[part]
4343
else obj[part] = value
4444
return oldValue
4545
}
@@ -65,7 +65,7 @@ function get (obj, pointer) {
6565
for (var p = 1; p < len;) {
6666
obj = obj[untilde(pointer[p++])]
6767
if (len === p) return obj
68-
if (typeof obj !== 'object') return null
68+
if (typeof obj !== 'object') return undefined
6969
}
7070
}
7171

test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,25 @@ assert.equal(jsonpointer.get(obj, '/d/e/0/a'), 4)
4040
assert.equal(jsonpointer.get(obj, '/d/e/1/b'), 5)
4141
assert.equal(jsonpointer.get(obj, '/d/e/2/c'), 6)
4242

43+
// can set `null` as a value
44+
assert.equal(jsonpointer.set(obj, '/f/g/h/foo/0', null), 'test')
45+
assert.strictEqual(jsonpointer.get(obj, '/f/g/h/foo/0'), null)
46+
assert.equal(jsonpointer.set(obj, '/b/c', null), 3)
47+
assert.strictEqual(jsonpointer.get(obj, '/b/c'), null)
48+
4349
assert.equal(jsonpointer.get(obj, ''), obj)
4450
assert.throws(function () { jsonpointer.get(obj, 'a') }, validateError)
4551
assert.throws(function () { jsonpointer.get(obj, 'a/') }, validateError)
4652

53+
// can unset values with `undefined`
54+
jsonpointer.set(obj, '/a', undefined)
55+
assert.strictEqual(jsonpointer.get(obj, '/a'), undefined)
56+
jsonpointer.set(obj, '/d/e/1', undefined)
57+
assert.strictEqual(jsonpointer.get(obj, '/d/e/1'), undefined)
58+
59+
// returns `undefined` when path extends beyond any existing objects
60+
assert.strictEqual(jsonpointer.get(obj, '/x/y/z'), undefined)
61+
4762
function validateError (err) {
4863
if ((err instanceof Error) && /Invalid JSON pointer/.test(err.message)) {
4964
return true

0 commit comments

Comments
 (0)