RFC6901 JSON Pointer implementation in OCaml using jsont
at main 4.0 kB view raw
1JSON Pointer Evaluation Tests (RFC 6901 Section 5) 2 3Using the RFC 6901 example document: 4 $ cat data/rfc6901_example.json 5 { 6 "foo": ["bar", "baz"], 7 "": 0, 8 "a/b": 1, 9 "c%d": 2, 10 "e^f": 3, 11 "g|h": 4, 12 "i\\j": 5, 13 "k\"l": 6, 14 " ": 7, 15 "m~n": 8 16 } 17 18Root pointer returns whole document: 19 $ ./test_pointer.exe eval data/rfc6901_example.json "" 20 OK: {"foo":["bar","baz"],"":0,"a/b":1,"c%d":2,"e^f":3,"g|h":4,"i\\j":5,"k\"l":6," ":7,"m~n":8} 21 22RFC 6901 examples: 23 $ ./test_pointer.exe eval data/rfc6901_example.json "/foo" 24 OK: ["bar","baz"] 25 $ ./test_pointer.exe eval data/rfc6901_example.json "/foo/0" 26 OK: "bar" 27 $ ./test_pointer.exe eval data/rfc6901_example.json "/foo/1" 28 OK: "baz" 29 $ ./test_pointer.exe eval data/rfc6901_example.json "/" 30 OK: 0 31 $ ./test_pointer.exe eval data/rfc6901_example.json "/a~1b" 32 OK: 1 33 $ ./test_pointer.exe eval data/rfc6901_example.json "/c%d" 34 OK: 2 35 $ ./test_pointer.exe eval data/rfc6901_example.json "/e^f" 36 OK: 3 37 $ ./test_pointer.exe eval data/rfc6901_example.json "/g|h" 38 OK: 4 39 $ ./test_pointer.exe eval data/rfc6901_example.json '/i\j' 40 OK: 5 41 $ ./test_pointer.exe eval data/rfc6901_example.json '/k"l' 42 OK: 6 43 $ ./test_pointer.exe eval data/rfc6901_example.json "/ " 44 OK: 7 45 $ ./test_pointer.exe eval data/rfc6901_example.json "/m~0n" 46 OK: 8 47 48Error: nonexistent member: 49 $ ./test_pointer.exe eval data/rfc6901_example.json "/nonexistent" 50 ERROR: JSON Pointer: member 'nonexistent' not found 51 File "-": 52 53Error: index out of bounds: 54 $ ./test_pointer.exe eval data/rfc6901_example.json "/foo/2" 55 ERROR: JSON Pointer: index 2 out of bounds (array has 2 elements) 56 File "-": 57 $ ./test_pointer.exe eval data/rfc6901_example.json "/foo/99" 58 ERROR: JSON Pointer: index 99 out of bounds (array has 2 elements) 59 File "-": 60 61Error: invalid array index (not a valid integer): 62 $ ./test_pointer.exe eval data/rfc6901_example.json "/foo/bar" 63 ERROR: JSON Pointer: invalid array index 'bar' 64 File "-": 65 66Error: end marker not allowed in get: 67 $ ./test_pointer.exe eval data/rfc6901_example.json "/foo/-" 68 ERROR: Invalid JSON Pointer: '-' not allowed in navigation pointer 69 70Error: navigating through primitive (string): 71 $ ./test_pointer.exe eval data/rfc6901_example.json "/foo/0/0" 72 ERROR: JSON Pointer: cannot index into string with '0' 73 File "-": 74 $ ./test_pointer.exe eval data/rfc6901_example.json "/foo/0/bar" 75 ERROR: JSON Pointer: cannot index into string with 'bar' 76 File "-": 77 78Nested evaluation with deep nesting: 79 $ cat data/nested.json 80 { 81 "a": { 82 "b": { 83 "c": { 84 "d": "deep value" 85 } 86 } 87 }, 88 "arr": [[1, 2], [3, 4]], 89 "mixed": { "list": [{"x": 1}, {"y": 2}] } 90 } 91 $ ./test_pointer.exe eval data/nested.json "/a/b/c/d" 92 OK: "deep value" 93 $ ./test_pointer.exe eval data/nested.json "/arr/0/1" 94 OK: 2 95 $ ./test_pointer.exe eval data/nested.json "/arr/1/0" 96 OK: 3 97 $ ./test_pointer.exe eval data/nested.json "/mixed/list/0/x" 98 OK: 1 99 $ ./test_pointer.exe eval data/nested.json "/mixed/list/1/y" 100 OK: 2 101 102Null value handling: 103 $ cat data/nulls.json 104 { 105 "null": null, 106 "nested": { "null": null } 107 } 108 $ ./test_pointer.exe eval data/nulls.json "/null" 109 OK: null 110 $ ./test_pointer.exe eval data/nulls.json "/nested/null" 111 OK: null 112 113Boolean values: 114 $ cat data/booleans.json 115 { 116 "true": true, 117 "false": false 118 } 119 $ ./test_pointer.exe eval data/booleans.json "/true" 120 OK: true 121 $ ./test_pointer.exe eval data/booleans.json "/false" 122 OK: false 123 124Empty key access: 125 $ ./test_pointer.exe eval data/rfc6901_example.json "/" 126 OK: 0 127 128Unicode member access: 129 $ cat data/unicode.json 130 { 131 "café": "coffee", 132 "日本語": "japanese", 133 "🎉": "party" 134 } 135 $ ./test_pointer.exe eval data/unicode.json "/café" 136 OK: "coffee" 137 $ ./test_pointer.exe eval data/unicode.json "/日本語" 138 OK: "japanese" 139 $ ./test_pointer.exe eval data/unicode.json "/🎉" 140 OK: "party"