1. 安装 pip install jsonpath
2. jsonpath语法:
符号 | 描述 |
$ | 查询的根节点对象,用于表示一个json数据,可以是数组或对象 |
@ | 过滤器断言(filter predicate)处理的当前节点对象,类似于Java中的this字段 |
* | 通配符,可以表示一个名字或数字 |
.. | 可以理解为递归搜索,deep scan。 AVailable anywhere a name is required |
.<name> | 表示一个子节点 |
['<name>'(,'<name>')] | 表示一个或多个子节点 |
[<number>(,<number>)] | 表示一个或多个数组下标 |
[start:end] | 数组片段,区间为[start,end),不包括end |
[?(expression)] |
过滤器表达式,表达式结果必须是Boolean |
3. 函数
名称 | 描述 | 输出 |
min() | 获取数值类型数组的最小值 | Double |
max() | 获取数值类型数组的最大值 | Double |
avg() | 获取数值类型数组的平均值 | Double |
stddev() | 获取数值类型数组的标准差 | Double |
length() | 获取数值类型数组的长度 | Integer |
4. 过滤器
过滤器是用于过滤数组的逻辑表达式,一个通常的表达式形如:[?(@.age>18)],可以通过逻辑表达式&&或||组合多个过滤器表达式,例如
[?(@.price<10 && @.category == 'fiction')],字符串必须用单引号包围,例如[?(@.color == 'blue')]
操作符 | 描述 |
== | == 等于符号,但数字1不等于字符串1(note that 1 is not equal to '1') |
!= | 不等于符号 |
< | 小于符号 |
<= | 小于等于符号 |
> | 大于符号 |
>= | 大于等于符号 |
=~ | 判断是否符合则这表达式,例如[?(@.name =~ /foo.*?/i)] |
in | 所属符号,例如[?(@.size in ['S','M'])] |
nin | nin 排除符号 |
size | size of left(arry or string)should match right |
empty |
判空符号 |
5. xpath jsonpath 对比
xpath | Jsonpath | Result |
/store/book/author | $.store.book[*].author | 所有book的author节点 |
//author | $..author | 所有author节点 |
/store/* | $.store.* | store下的所有节点book数组和bicycle节点 |
/store//price | $.store..price | store下的所有price节点 |
//book[3] | $..book[2] | 匹配第三个book节点 |
//book[last()] | $..book[(@.length-1)] 或$..book[-1:] | 匹配倒数第一个book节点 |
//book[posision()<3] | $..book[0,1] 或$..book[:2] | 匹配前两个book节点 |
//book[isbn] | $..book[?(@.isbn)] | 过滤包含isbn字段的节点 |
//book[price<10] | $..book[?@.price<10)] | 过滤price<10的节点 |
//* | $..* | 递归匹配所有子节点 |