jsonpath

发布时间 2023-05-31 16:16:51作者: 来了发发发

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的节点
//*  $..*  递归匹配所有子节点