Skip to content

greyblake/jsonpath-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JSONPath for Rust

The library is in hard development stage.

Build Status

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 <
    • operator >=
    • operator <=
    • operator =~
    • filter comparison with expression on the right side [?(<exporession> <operator> <expression>)]
    • string
    • float
    • integer
    • array of string
    • array of float
    • array of number
    • sub script expression ()
    • and operator &&
    • or operator ||

Supported Rust versions

Jsonpath requires rust version 1.26 or higher.

License

MIT © Sergey Potapov

Contributors