2 releases
Uses old Rust 2015
| 0.1.1 | Apr 1, 2018 |
|---|---|
| 0.1.0 | Dec 28, 2017 |
#9 in #json-path-query
37,801 downloads per month
Used in 37 crates
(11 directly)
31KB
776 lines
JSONPath for Rust
The library is in hard development stage.
Example
extern crate jsonpath;
extern crate serde_json;
use jsonpath::Selector;
use serde_json::Value;
fn main() {
let jsondoc = r#"
{
"books": [
{
"title": "Der schwarze Obelist",
"author": "Erich Maria Remarque"
},
{
"title": "Le mur",
"author": "Jean-Paul Sartre"
}
]
}
"#;
// Parse JSON document
let json: Value = serde_json::from_str(jsondoc).unwrap();
// Create a JSONPath selector
let selector = Selector::new("$.books.*.title").unwrap();
// Apply the selector to the JSON and convert Vec<&Value> into Vec<&str>
let titles: Vec<&str> = selector.find(&json)
.map(|t| t.as_str().unwrap())
.collect();
assert_eq!(titles, vec!["Der schwarze Obelist", "Le mur"]);
}
Roadmap
- Operators:
-
$- root element -
.<name>- named child element -
*- wildcard (any child item) -
[<number>]- indexed element in array -
[<start>:<end>]- slice -
[:<end>]- slice (to) -
[<start>:]- slice (from)
-
- Handy test helpers
- Good integration test coverage
- Benchmarks
- Refactor
- Improve error messages
- Review unwraps
- Review the public API (rename Selector -> Path ?)
- Publish a new version
- Mutable iterator
- Support filters
-
[?(<expression>)]- Filter expression. Expression must evaluate to a boolean value. -
@- current element - operator
== - operator
!= - operator
> - operator
<
-
License
Contributors
- greyblake Sergey Potapov - creator, maintainer.
- MarcAntoine-Arnaud Marc-Antoine ARNAUD - filters support
Dependencies
~7.5MB
~150K SLoC