2 releases

Uses old Rust 2015

0.1.1 Apr 1, 2018
0.1.0 Dec 28, 2017

#9 in #json-path-query

Download history 5997/week @ 2025-08-27 6240/week @ 2025-09-03 6575/week @ 2025-09-10 6802/week @ 2025-09-17 7609/week @ 2025-09-24 7800/week @ 2025-10-01 9084/week @ 2025-10-08 6977/week @ 2025-10-15 8119/week @ 2025-10-22 6997/week @ 2025-10-29 5879/week @ 2025-11-05 6041/week @ 2025-11-12 9536/week @ 2025-11-19 9351/week @ 2025-11-26 9799/week @ 2025-12-03 7667/week @ 2025-12-10

37,801 downloads per month
Used in 37 crates (11 directly)

MIT license

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

MIT © Sergey Potapov

Contributors

Dependencies

~7.5MB
~150K SLoC