Crate cborpath

source ·
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

JSONPathCBORPathDescription
$"$"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.

JSONPathCBORPathIntended 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

Modules

Structs

Enums