#json-path #json #json-query

app json_path_bin

JsonPath的Rust实现

1 个不稳定版本

0.1.5 2023年6月12日

#5 in #jsonpath

MIT/Apache

81KB
2K SLoC

jsonpath-rs

Crates.io docs.rs Rust CI

JsonPath的Rust实现。

原因

  1. 根据用户查询返回正确的结果类型(标量与数组)
  2. 支持丰富的过滤器和方法(进行中),例如:[?((@.id > 10 || @.id < -1) && @.msg contains 'jsonpath')]

使用库

use json_path::JsonPathQuery;
use serde_json::json;

let object = json!({"greetings": "hello, json_path"});
let result = object.query("$['greetings']");
assert_eq!(Ok(json!("hello, json_path")), result);

使用二进制文件

$ cargo install json_path_bin
$ echo '{"msg": "hello!"}' | json_path_bin -j '$.msg'
"hello!"
$

功能

操作符

操作符 描述
$ 查询的根元素。这是所有路径表达式的起点。
@ 过滤器谓词正在处理的当前节点。
* 通配符。在需要名称或数字的地方都可以使用。
.. 深度扫描。在需要名称的地方都可以使用。
.<名称> 点表示的子节点
['<名称>' (, '<名称>')] 括号表示的子节点或子节点集合
[<数字> (, <数字>)] 数组索引或索引集合
[开始:结束] 数组切片操作符
[?(<表达式>)] 过滤器表达式。表达式必须评估为布尔值。
  1. 可以用于数组索引或数组切片的负数。它表示评估器从数组的末尾访问一个元素。
  2. 数组切片可以支持诸如
    • [1:] 从索引1(包含)到末尾的切片
    • [:-1] 从开始到最后一项(不包含)的切片
    • [1:10] 从1(包含)到10(不包含)的切片

过滤器

操作符 描述
== 左等于右(注意1不等于'1')
!= 左不等于右
< 左小于右
<= 左小于或等于右
> 左大于右
>= 左大于或等于右
=~ 进行中,左匹配正则表达式[?(@.name =~ /foo.*?/i)]
! 用于否定过滤器:[?([email protected])] 匹配没有isbn属性的项。
在...中 左存在于右[?(@.size in ['S', 'M'])]
不在...中 左不存在于右
子集 左是右的子集[?(@.sizes subsetof ['S', 'M', 'L'])]
包含 检查字符串是否包含指定的子串(区分大小写),或数组是否包含指定的元素
任何一个 左侧与右侧有交集 [?(@.sizes anyof ['M', 'L'])]
noneof 左侧与右侧无交集 [?(@.sizes noneof ['M', 'L'])]
size 左侧的大小(数组或字符串)应与右侧匹配
empty 左侧(数组或字符串)应为空,例如:[?(@.name empty false)]
(<expressions>) 使用括号分组表达式,例如:[?(!(@.sizes contains 'M'))]

类似项目

依赖项

~1.7–2.7MB
~52K SLoC