2 个版本

使用旧的 Rust 2015

0.1.1 2018 年 4 月 1 日
0.1.0 2017 年 12 月 28 日

#2106解析器实现

Download history 3688/week @ 2024-03-14 4032/week @ 2024-03-21 3313/week @ 2024-03-28 4118/week @ 2024-04-04 3986/week @ 2024-04-11 3293/week @ 2024-04-18 3346/week @ 2024-04-25 4719/week @ 2024-05-02 3651/week @ 2024-05-09 3370/week @ 2024-05-16 3720/week @ 2024-05-23 3379/week @ 2024-05-30 3094/week @ 2024-06-06 4139/week @ 2024-06-13 3463/week @ 2024-06-20 2383/week @ 2024-06-27

13,864 每月下载量
7 crates 中使用

MIT 许可证

31KB
776 代码行

适用于 Rust 的 JSONPath

该库处于开发阶段。

示例

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"]);
}

路线图

  • 运算符
    • $ - 根元素
    • .<name> - 命名子元素
    • * - 通用(任何子项)
    • [<number>] - 数组中的索引元素
    • [<start>:<end>] - 切片
    • [:<end>] - 切片(到)
    • [<start>:] - 切片(从)
  • 实用的测试辅助工具
  • 良好的集成测试覆盖率
  • 基准测试
  • 重构
  • 改进错误消息
  • 审查 unwraps
  • 审查公共 API(将 Selector 重命名为 Path ?)
  • 发布新版本
  • 可变迭代器
  • 支持过滤器
    • [?(<expression>)] - 过滤表达式。表达式必须评估为布尔值。
    • @ - 当前元素
    • 运算符 ==
    • 运算符 !=
    • 运算符 >
    • 运算符 <

许可证

MIT © Sergey Potapov

贡献者

依赖项

~7.5MB
~151K SLoC