[](https://github.com/RedisJSON/jsonpath_rs/blob/master/LICENSE)
[](https://github.com/RedisJSON/jsonpath_rs/releases/latest)
[](https://github.com/RedisJSON/jsonpath_rs/actions/workflows/rust.yml)
[](https://crates.io/crates/jsonpath_rs)
# jsonpath_rs
[](https://forum.redislabs.com/c/modules/redisjson)
[](https://discord.gg/QUkjSsk)
A JSONPath library for rust. The idea behind this library is that it can operate on any json representation as long as it implements the [`SelectValue`](src/select_value.rs) triat. The library has an implementation for [serde_json value](https://docs.serde.rs/serde_json/value/enum.Value.html) and [ivalue](https://docs.rs/tch/0.1.1/tch/enum.IValue.html).
### Getting Started
Add the following to your cargo.toml
```rust
[dependencies]
jsonpath_rs = { git = "https://github.com/RedisJSON/jsonpath_rs.git", branch = "master" }
```
Usage example:
```rust
extern crate jsonpath_rs
#[macro_use] extern crate serde_json;
fn main() {
let mut query = jsonpath_rs::compile("$..friends[0]");
let path = jsonpath_rs::create(&query)
let json_obj = json!({
"school": {
"friends": [
{"name": "foo1", "age": 20},
{"name": "foo2", "age": 20}
]
},
"friends": [
{"name": "foo3", "age": 30},
{"name": "foo4"}
]
});
let json = path.calc(&json_obj);
assert_eq!(json, vec![
&json!({"name": "foo3", "age": 30}),
&json!({"name": "foo1", "age": 20})
]);
}
```
### Tests
`jsonpath_rs` pass **Almost** all the tests on https://github.com/freestrings/jsonpath, to run the tests:
```rust
cargo test
```