在 JsonPath 中,为了方便提取 JSON 内容,提供了很多内置的过滤操作符,使用过滤操作符可以根据条件对 JSON 进行过滤。
过滤器是用于过滤数组的逻辑表达式,一个典型的过滤器是 [?(@.age > 18)] ,其中:
[?()] 表示一个过滤表达式,参考 JsonPath [?(< expression>)] 操作符
@ 代表正在处理的当前项目。
@.age 表示当前正在处理项的 age 字段。
@.age > 18 表示将当前正在处理项的 age 字段值和 18 进行比较,判断是否大于 18,如果大于,则返回 true;否则,返回 false。
注意:
(1)使用逻辑运算符 && 和 || 可以创建更复杂的过滤器。
(2)字符串文字必须用单引号或双引号括起来,例如:[?(@.color == 'blue')] 或者 [?(@.color == "blue")]。
过滤操作符表:
操作符 | 描述 |
== | 判断左边等于右边,注意 1 不等于'1',示例: [?(@.age == 20)] 判断年龄是否等于 20 岁 |
!= | 左边不等于右边,示例: [?(@.age != 20)] 判断年龄是否不等于 20 岁 |
< | 左边小于右边,示例: [?(@.age < 18)] 判断年龄是否小于 18 岁 |
<= | 左边小于等于右边,示例: [?(@.age <= 18)] 判断年龄是否小于等于 18 岁 |
> | 左边大于右边,示例: [?(@.age > 20)] 判断年龄是否大于 20 岁 |
>= | 左边大于等于右边,示例: [?(@.age != 20)] 判断年龄是否大于等于 20 岁 |
=~ | 左侧匹配右侧的正则表达式,示例: [?(@.name =~ /foo.*?/i)] |
in | 左边存在于右边,示例: [?(@.sex in ['男', '女'])] 判断性别 sex 的值是否为“男”或“女” |
nin | 左边不存在于右边,示例: [?(@.sex nin ['男', '女'])] 判断性别 sex 的值不是“男”,也不是“女” |
subsetof | 左边是右边的子集,示例: [?(@.sizes subsetof ['S', 'M', 'L'])] 判断 sizes 字段的值是否为 ['S', 'M', 'L'] 的一个子集 |
anyof | 左边与右边有交集,示例: [?(@.sizes anyof ['M', 'L'])] 判断 sizes 字段和 ['M','L'] 是否存在交集,即 sizes 字段的值至少有一个在 ['M', 'L'] 中 |
noneof | 左边与右边没有交集,示例: [?(@.sizes noneof ['M', 'L'])] 判断 sizes 字段和 ['M', 'L'] 不存在交集,即 sizes 字段的值在 ['M', 'L'] 中不存在 |
size | 左侧(数组或字符串)的大小应与右侧一致 |
empty | left (array or string) should be empty left(数组或字符串)应为空 |