jsonpath
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的节点 |
| //* | $..* | 递归匹配所有子节点 |
本文来自博客园,作者:来了发发发,转载请注明原文链接:https://www.cnblogs.com/julia888/p/17446457.html

浙公网安备 33010602011771号