Expand description
cborpath is a CBORPath engine written in Rust. CBORPath is an adaptation of JSONPath to CBOR based on the JsonPATH RFC Draft
CBORPath
Syntax summary
| JSONPath | CBORPath | Description |
|---|---|---|
$ | "$" | root node identifier |
@ | "@" | current node identifier (valid only within filter selectors) |
[<selectors>] | [<selectors>] | child segment selects zero or more children of a node; contains one or more selectors, separated by commas |
..[<selectors>] | {"..": [<selectors>]} | descendant segment: selects zero or more descendants of a node; contains one or more selectors, separated by commas |
'name' | <CBOR Text><CBOR Bytes><CBOR Integer><CBOR Float><CBOR Boolean><CBOR Null> | key selector: selects a child of a CBOR Map based on the child key |
* | {"*": 1} | wildcard selector: selects all children of a node |
3 | {"#": <index> } | index selector: selects an indexed child of an array (from 0) |
0:100:5 | {":": [<start>, <end>, <step>]} | array slice selector: start:end:step for arrays |
?<expr> | {"?": <expr>} | filter selector: selects particular children using a boolean expression |
length(@.foo) | {"length": ["@", "foo"]} | function extension: invokes a function in a filter expression |
Examples
This section is informative. It provides examples of CBORPath expressions.
The examples are based on the simple CBOR value representing a bookstore (that also has a bicycle).
{ "store": {
"book": [
{ "category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{ "category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{ "category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{ "category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 399
}
}
}
This table shows some CBORPath queries that might be applied to this example and their intended results.
| JSONPath | CBORPath | Intended result |
|---|---|---|
$.store.book[*].author | ["$", "store", "book", {"*": 1}, "author"] | the authors of all books in the store |
$..author | ["$", {"..": "author"}] | all authors |
$.store.* | ["$", "store", {"*": 1}] | all things in store, which are some books and a red bicycle |
$.store..price | ["$", "store", {"..": "price"}] | the prices of everything in the store |
$..book[2] | ["$", {"..": ["book", {"#": 2}]}] | the third book |
$..book[-1] | ["$", {"..": ["book", {"#": -1}]}] | the last book in order |
$..book[0,1]$..book[:2] | ["$", {"..": ["book", [{"#": 0}, {"#": 1}]]}]["$", {"..": ["book", {":": [0, 1, 1]}]}] | the first two books |
$..book[?(@.isbn)] | ["$", {"..": {"?": ["@", "isbn"]}}] | all books with an ISBN number |
$..book[?(@.price<10)] | ["$", {"..": {"?": {"<": [["@", "price"], 10]}}}] | all books cheaper than 10 |
$..* | ["$": {"..": {"*": 1}}] | all member values and array elements contained in input value |