Solon v3.6.0

snack - JsonPath 语法参考

</> markdown

1、JSONPath 语法参考(IETF JSONPath (RFC 9535)

语法元素描述示例
$根节点标识符$.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")])。

  • IETF 规范定义操作符(支持)
操作符描述示例
==左等于右(注意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)]
emptyLeft(数组或字符串)应该为空$[?(@.s empty false)]
  • snack jsonpath 额外操作符(支持)
操作符描述示例
startsWith左(字符串)开头匹配右[?(@.s startsWith 'a')]
endsWith左(字符串)结尾匹配右[?(@.s endsWith 'b')]
contains左(数组或字符串)包含匹配右[?(@.s contains 'c')]
  • 支持外部扩展定制

4、扩展函数参考(支持外部扩展定制)

以下函数,可同时用于 “过滤器” 或 “查询器”。示例:$[?length(@) > 1](作为过滤函数) 或 $.length() (作为选择器)

  • IETF 规范预置函数(支持)
过滤函数描述参数类型结果类型
length(x)字符串、数组或对象的长度数值
count(x)节点列表的大小节点列表数值
match(x,y)正则表达式完全匹配值,值逻辑值
search(x,y)正则表达式子字符串匹配值,值逻辑值
value(x)节点列表中单个节点的值节点列表
  • jayway jsonpath 预置函数(支持)

函数可以在路径的末尾调用——函数的输入是路径表达式的输出。函数的输出由函数本身决定。

函数描述输出类型
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可以是负数(从末尾开始计算)依赖于数组元素类型
  • 支持外部扩展定制