背景
因为之前用到Jmeter的Json 提取器涉及到JsonPath的使用,因此查找了一些文章,将里面的精华部分运算符的使用提取出来记录以下,方便自己以后使用。
JsonPath
- JsonPath参照XPath解析xml的方式来解析Json
- JsonPath用符号$表示最外层对象,类似于Xpath中的根元素
- JsonPath可以通过点语法来检索数据,如:
shell $.store.book[0].title
- 也可以使用中括号[]的形式,如
shell $['store']['book'][0]['title']
运算符(Operators)
运算符 |
说明 |
$ |
根元素 |
@ |
当前元素 |
* |
通配符,可以表示任何元素 |
.. |
递归搜索 |
. |
子节点(元素) |
['' (, '')] |
一个或者多个子节点 |
[ (, )] |
一个或者多个数组下标 |
[start:end] |
数组片段,区间为[start,end) |
[?()] |
过滤器表达式,其中表达式结果必须是boolean类型,如可以是比较表达式或者逻辑表达式 |
|
JsonPath案例
{
"lemon": {
"teachers": [{
"id": "101",
"name": "华华",
"addr": "湖南长沙",
"age": 25
},
{
"id": "102",
"name": "韬哥",
"age": 28
},
{
"id": "103",
"name": "Happy",
"addr": "广东深圳",
"age": 16
},
{
"id": "104",
"name": "歪歪",
"addr": "广东广州",
"age": 29
}
],
"salesmans": [{
"id": "105",
"name": "毛毛",
"age": 17
},
{
"id": "106",
"name": "大树",
"age": 27
}
]
},
"avg": 25
}
JsonPath例子及说明
JsonPath |
路径说明 |
$.lemon.teachers[*].name |
获取所有老师的的名称 |
$..name |
获取所有人的名称 |
$.lemon.* |
所有的老师和销售 |
$.lemon..age |
所有人的年龄 |
$..age |
所有人的年龄 |
$.lemon.teachers[*].age |
所有老师的年龄 |
$.lemon.teachers[3] |
索引为3(第4个)老师的信息 |
$..teachers[3] |
索引为3(第4个)老师的信息 |
$.lemon.teachers[-2] |
倒数第2个老师的信息 |
$..teachers[-2] |
倒数第2个老师的信息 |
$..teachers[1,2] |
第2到第3个老师的信息 |
$..teachers[:2] |
索引0(包含)到索引2(不包含)的老师信息 |
$..teachers[1:3] |
索引1(包含)到索引3(不包含)的老师信息 |
$..teachers[-2:] |
最后的两个老师的信息 |
$..teachers[2:] |
索引2开始的所有老师信息 |
$..teachers[?(@.addr)] |
所有包含地址的老师信息(jsonpath_rw不支持) |
$.lemon.teachers[?(@.age < 20)] |
所有年龄小于20的年龄信息(jsonpath_rw不支持) |
更多jsonpath_rw用法参考:
https://pypi.org/project/jsonpath-rw/