语法元素 | 描述 | 示例 |
$ | 根节点标识符 | $.a |
@ | 当前节点标识符(仅在过滤选择器中有效) | @.a |
[<selectors>] | 子段:选择节点的零个或多个子节点 | $['a'] , @[ a] |
.name | 简写 ['name'] | $.a , @.a |
.* | 简写 [*] | $.* , @.* |
..[<selectors>] | 后代段:选择节点的零个或多个后代 | $..a , @..a |
..name | 简写 ..['name'] | $..a , @..a |
..* | 简写 ..[*] | $..* , @..* |
'name' | 名称选择器:选择对象的命名子对象 | $['a'] , @[ a] |
* | 通配符选择器:选择节点的所有子节点 | $[*] , @[*] |
3 | 索引选择器:选择数组的索引子项(从 0 开始) | $[3] , @[3] |
0:100:5 | 数组切片选择器:数组的 start:end:step | $[0:100:5] , @[0:100:5] |
?<logical-expr> | 过滤选择器:使用逻辑表达式选择特定的子项 | $[?@a == 1] |
fun(@.foo) | 过滤函数:在过滤表达式中调用函数(IETF 标准) | $[?count(@.a) > 5] |
.fun() | 聚合函数:作选择器用(jayway 风格) | $.list.min() |
过滤函数、聚合函数,统称为:扩展函数。
2、过滤选择器语法参考
语法 | 描述 | 优先级 | 示例 |
(...) | 分组 | 5 | $[?(@a > 1) && (@.b < 2)] |
fun(...) | 函数扩展 | 5 | $[?count(@.a) > 5] |
! | 逻辑 非 | 4 | $[?!(@a > 1)] |
== ,!= ,< ,<= ,> ,>= | 关系操作符 | 3 | $[?(@a == 1)] |
&& | 逻辑 与 | 2 | $[?(@a > 1) && (@.b < 2)] |
|| | 逻辑 或 | 1 | $[?(@a > 1) || (@.b < 2)] |
3、操作符参考(支持外部扩展定制)
过滤器是用于过滤数组的逻辑表达式。一个典型的过滤器是[?(@。Age > 18)]
其中@
表示当前正在处理的项目。更复杂的过滤器可以使用逻辑操作符&&
和||
创建。字符串字面量必须用单引号或双引号括起来([?(@.color == 'blue')] or [?(@.color == "blue")]
)。
操作符 | 描述 | 示例 |
== | 左等于右(注意1不等于'1') | |
!= | 左不等于右 | |
< | 左比右小 | |
<= | 左小于或等于右 | |
> | 左大于右 | |
>= | 左大于等于右 | |
- jayway jsonpath 额外操作符(支持)
操作符 | 描述 | 示例 |
=~ | 左匹配正则表达式 | [?(@.s =~ /foo.*?/i)] |
in | 左存在于右 | [?(@.s in ['S', 'M'])] |
nin | 左不存在于右 | |
subsetof | 左是右的子集 | [?(@.s subsetof ['S', 'M', 'L'])] |
anyof | 左与右有一个交点 | [?(@.s anyof ['M', 'L'])] |
noneof | 左与右没有交集 | [?(@.s noneof ['M', 'L'])] |
size | 左(数组或字符串)的大小应该与右匹配 | $[?(@.s size @.expected_size)] |
empty | Left(数组或字符串)应该为空 | $[?(@.s empty false)] |
操作符 | 描述 | 示例 |
startsWith | 左(字符串)开头匹配右 | [?(@.s startsWith 'a')] |
endsWith | 左(字符串)结尾匹配右 | [?(@.s endsWith 'b')] |
contains | 左(数组或字符串)包含匹配右 | [?(@.s contains 'c')] |
4、扩展函数参考(支持外部扩展定制)
以下函数,可同时用于 “过滤器” 或 “查询器”。示例:$[?length(@) > 1]
(作为过滤函数) 或 $.length()
(作为选择器)
过滤函数 | 描述 | 参数类型 | 结果类型 |
length(x) | 字符串、数组或对象的长度 | 值 | 数值 |
count(x) | 节点列表的大小 | 节点列表 | 数值 |
match(x,y) | 正则表达式完全匹配 | 值,值 | 逻辑值 |
search(x,y) | 正则表达式子字符串匹配 | 值,值 | 逻辑值 |
value(x) | 节点列表中单个节点的值 | 节点列表 | 值 |
函数可以在路径的末尾调用——函数的输入是路径表达式的输出。函数的输出由函数本身决定。
函数 | 描述 | 输出类型 |
length() | 字符串、数组或对象的长度 | Integer |
min() | 查找当前数值数组中的最小值 | Double |
max() | 查找当前数值数组中的最大值 | Double |
avg() | 计算当前数值数组中的平均值 | Double |
stddev() | 计算当前数值数组中的标准差 | Double |
sum() | 计算当前数值数组中的总和 | Double |
keys() | 计算当前对象的属性键集合 | Set<E> |
concat(X) | 将一个项或集合和当前数组连接成一个新数组 | like input |
append(X) | 将一个项或集合 追加到当前路径的输出数组中 | like input |
first() | 返回当前数组的第一个元素 | 依赖于数组元素类型 |
last() | 返回当前数组的最后一个元素 | 依赖于数组元素类型 |
index(X) | 返回当前数组中索引为X的元素。X可以是负数(从末尾开始计算) | 依赖于数组元素类型 |