json_pointer
The json_pointer library provides predicates for parsing,
generating, and evaluating JSON Pointers as specified by RFC 6901, plus
support for Relative JSON Pointer:
It supports both the plain string syntax and the URI fragment syntax for
absolute JSON Pointers. Relative JSON Pointers use the plain string
syntax. Reference tokens can be represented as atoms, chars(List),
or codes(List).
API documentation
Open the ../../apis/library_index.html#json_pointer link in a web browser.
Loading
To load all entities in this library, load the loader.lgt file:
| ?- logtalk_load(json_pointer(loader)).
Testing
To test this library predicates, load the tester.lgt file:
| ?- logtalk_load(json_pointer(tester)).
Representation
The library defines the json_pointer(_Representation_) parametric
object where _Representation_ can be one of:
atom- reference tokens are represented as atomschars- reference tokens are represented aschars(List)codes- reference tokens are represented ascodes(List)
When using the default json_pointer object, reference tokens are
represented as atoms.
Relative JSON Pointer values are represented as
relative(Up, Shift, Suffix):
Upis the number of ancestor stepsShiftis the optional signed array index adjustmentSuffixis either a list of reference tokens or the atom'#'
Examples
Parse and evaluate a pointer:
| ?- json_pointer::parse(atom('/foo/0'), Pointer),
json_pointer::evaluate(Pointer, {foo-[bar, baz]}, Value).
Pointer = [foo, '0']
Value = bar
yes
Generate a URI fragment representation:
| ?- json_pointer::generate_fragment(atom(Fragment), ['a b', 'c/d']).
Fragment = '#/a%20b/c~1d'
yes
Evaluate a Relative JSON Pointer from a known context path:
| ?- json_pointer::evaluate_relative(relative(1, 0, ['0']), [foo, '1'], {foo-[bar, baz]}, Value).
Value = bar
yes