1 个不稳定版本
0.1.5 | 2023年6月12日 |
---|
#5 in #jsonpath
81KB
2K SLoC
jsonpath-rs
JsonPath的Rust实现。
原因
- 根据用户查询返回正确的结果类型(标量与数组)
- 支持丰富的过滤器和方法(进行中),例如:
[?((@.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:]
从索引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