Since there does not exist a standard for path syntax, ReJSON implements its own. ReJSON's syntax is a subset of common best practices and resembles JSONPath not by accident.
Paths always begin at the root of a ReJSON value. The root is denoted by the period character (
.). For paths referencing the root's children, prefixing the path with the root is optional.
Dotted- and square-bracketed, single-or-double-quoted-child notation are both supported for object keys, so the following paths all refer to bar, child of foo under the root:
Array elements are accessed by their index enclosed by a pair of square brackets. The index is 0-based, with 0 being the first element of the array, 1 being the next element and so on. These offsets can also be negative numbers, indicating indices starting at the end of the array. For example, -1 is the last element in the array, -2 the penultimate, and so on.
A note about JSON key names and path compatibility
- Names must begin with a letter, a dollar (
$) or an underscore (
- Names can contain letters, digits, dollar signs and underscores
- Names are case-sensitive
Time complexity of path evaluation
The complexity of searching (navigating to) an element in the path is made of:
- Child level - every level along the path adds an additional search
- Key search - O(N)†, where N is the number of keys in the parent object
- Array search - O(1)
This means that the overall time complexity of searching a path is O(N*M), where N is the depth and M is the number of parent object keys.
† while this is acceptable for objects where N is small, access can be optimized for larger objects, and this is planned for a future version.