6 个版本
0.1.5 | 2023 年 6 月 12 日 |
---|---|
0.1.4 | 2023 年 6 月 12 日 |
#7 in #scalar
34 每月下载量
用于 json_path_bin
73KB
2K SLoC
jsonpath-rs
A Rust 实现 JsonPath.
为什么
- 根据用户查询返回正确的结果类型(标量 vs. 数组)
- 支持丰富的过滤器和方法(进行中),例如
[?((@.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 属性的项目。 |
in |
左侧存在于右侧 [?(@.size in ['S', 'M'])] |
nin |
左侧不存在于右侧 |
subsetof |
左侧是右侧的子集 [?(@.sizes subsetof ['S', 'M', 'L'])] |
contains |
检查字符串是否包含指定的子串(区分大小写),或者数组是否包含指定的元素 |
anyof |
左侧与右侧有交集 [?(@.sizes anyof ['M', 'L'])] |
noneof |
左侧与右侧无交集 [?(@.sizes noneof ['M', 'L'])] |
size |
左侧(数组或字符串)的大小应与右侧匹配 |
empty |
左侧(数组或字符串)应为空,例如:[?(@.name empty false)] |
(<expressions>) |
使用括号分组表达式,例如:[?(!(@.sizes contains 'M'))] |
类似项目
依赖项
~0.4–0.8MB
~18K SLoC