forked from janl/node-jsonpointer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjsonpointer.js
More file actions
57 lines (51 loc) · 1.22 KB
/
jsonpointer.js
File metadata and controls
57 lines (51 loc) · 1.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
var console = require("console");
var traverse = function(obj, pointer, value) {
// assert(isArray(pointer))
var part = unescape(pointer.shift());
if(typeof obj[part] === "undefined") {
throw("Value for pointer '" + pointer + "' not found.");
return;
}
if(pointer.length != 0) { // keep traversin!
return traverse(obj[part], pointer, value);
}
// we're done
if(typeof value === "undefined") {
// just reading
return obj[part];
}
// set new value, return old value
var old_value = obj[part];
if(value === null) {
delete obj[part];
} else {
obj[part] = value;
}
return old_value;
}
var validate_input = function(obj, pointer) {
if(typeof obj !== "object") {
throw("Invalid input object.");
}
if(!pointer) {
throw("Invalid JSON pointer.");
}
}
var get = function(obj, pointer) {
validate_input(obj, pointer);
if (pointer === "/") {
return obj;
}
pointer = pointer.split("/").slice(1);
return traverse(obj, pointer);
}
var set = function(obj, pointer, value) {
validate_input(obj, pointer);
if (pointer === "/") {
return obj;
}
pointer = pointer.split("/").slice(1);
return traverse(obj, pointer, value);
}
exports.get = get
exports.set = set