JsonPath用法示例


  • 操作符
符号 描述
$ 查询的根节点对象,用于表示一个json数据,可以是数组或对象
@ 过滤器(filter predicate)处理的当前节点对象
* 获取所有节点
. 获取子节点
.. 递归搜索,筛选所有符合条件的节点
?() 过滤器表达式,筛选操作
[start:end] 数组片段,区间为[start,end),不包含end
[A]或[A,B] 迭代器下标,表示一个或多个数组下标
  • 函数。可以在JsonPath表达式执行后进行调用,其输入值为表达式的结果。
名称 描述
min() 获取数值类型数组的最小值
max() 获取数值类型数组的最大值
length() 获取数值类型数组的长度,例如$.data.length()
... ...
  • 过滤器。过滤器是用于过滤数组的逻辑表达式。
操作符 描述
== 等于
!= 不等于
< 小于
=~ 判断是否符合正则表达式,例如[?(@.name =~ /foo.*?/i)]
in 所属符号,例如[?(@.type in ["小雨","中到大雨"])]
nin 排除符号
... ....
如响应体:
BODY
{
   "code" : 200,
   "msg" : "成功!",
   "data" : {
      "yesterday" : {
         "date" : "13日星期一",
         "high" : "高温 23℃",
         "fx" : "东北风",
         "low" : "低温 18℃",
         "fl" : "<![CDATA[3-4级]]>",
         "type" : "小雨"
      },
      "city" : "杭州",
      "aqi" : null,
      "forecast" : [
         {
            "date" : "14日星期二",
            "high" : "24",
            "fengli" : "<![CDATA[3-4级]]>",
            "low" : "18",
            "fengxiang" : "东北风",
            "type" : "多云"
         },
         {
            "date" : "15日星期三",
            "high" : "22",
            "fengli" : "<![CDATA[3-4级]]>",
            "low" : "19",
            "fengxiang" : "东北风",
            "type" : "中到大雨"
         },
         {
            "date" : "16日星期四",
            "high" : "25",
            "fengli" : "<![CDATA[<3级]]>",
            "low" : "19",
            "fengxiang" : "东北风",
            "type" : "多云"
         },
         {
            "date" : "17日星期五",
            "high" : "30",
            "fengli" : "<![CDATA[<3级]]>",
            "low" : "22",
            "fengxiang" : "无持续风向",
            "type" : "小雨"
         },
         {
            "date" : "18日星期六",
            "high" : "33",
            "fengli" : "<![CDATA[<3级]]>",
            "low" : "19,
            "fengxiang" : "无持续风向",
            "type" : "多云"
         }
      ],
      "ganmao" : "各项气象条件适宜,无明显降温过程,发生感冒机率较低。",
      "wendu" : "21"
   }
}
用法示例:
  • 表达式:$..*

表示获取是所有的返回值。

  • 表达式:$.data.forecast[*].type 或 $.data..type

表示获取的是data下forecast数组中所有的type字段值。获取值为:["多云","中到大雨","多云","小雨","多云"]

  • 表达式:$.data.forecast.length()

表示获取的是data下forecast数组长度。获取值为:5

  • 表达式:$.data.forecast[?(@.type == "小雨")].date

表示获取的是data下forecast数组中天气类型为“小雨”的日期。获取值为:["17日星期五"]

  • 表达式:$.data.forecast[?(@.type =~ /^小雨.*/)].date

表示以正则表达式过滤获取的是data下forecast数组中有“小雨”的日期。获取值为:["15日星期三"]

  • 表达式:$.data.forecast[?((@.high <= "30")&&(@.high >= "15"))].date

表示获取的是data下forecast数组中高温温度在25℃~30℃之间的日期。获取值为:["16日星期四","17日星期五"]

  • 表达式:$.data.forecast[?((@.type == "小雨")||(@.type == "中到大雨"))].date 或 $.data.forecast[?(@.type in ["小雨","中到大雨"])].date

表示获取的是data下forecast数组中天气类型为“小雨”或“中到大雨”的日期。获取值为:["15日星期三","17日星期五"]

特殊用法:

1、校验返回体中某一个字段是否包含某一个值或多个值或某些内容,校验包含多个值以&&符号连接。例如type值中是否包含“多云”。

表达式:$.data.forecast[*].type 获取值为:["多云","中到大雨","多云","小雨","多云"]

用法:校验类型:Json匹配 参数:$.data.forecast[*].type 值:多云

描述:此块逻辑平台做了兼容处理,若值列填写的值包含于表达式获取的数组列表中,则校验通过。

2、在用例中校验或场景中表达式过滤输出获取到的值中某一个,例如type值中第一个值。

表达式:$.data.forecast[*].type 获取值为:["多云","中到大雨","多云","小雨","多云"]

取获取值中第一个值“多云”:{$.data.forecast[*].type}[0],依次类推。

3、若校验的返回体中参数key中含有 . () *等关键字时(与平台校验逻辑中关键字冲突,导致校验不通过)可以使用以下方法:

{
   "data" : [
      {
         "count(*)" : 123,
         "left(send_address,2)":456
      }
   ]
}

表达式:$.["data"][0]["count(*)"] 获取值为:123

表达式:{$.["data"][0]}['left(send_address,2)'] 获取值为:456

4、若校验返回体中某一个数组中参数包含或不包含某一个参数时,例如校验不包含avgUv7D

[
 {
  "supplierId":523,
  "goodsId":55280465,
  "onlineStatus":1,
  "title":"多颜色商品-auto-20161121154939513",
  "importType":1,
 }
]

表达式:{$.[?(@.goodsId == 55280465)]}.contains('avgUv7D') 获取值为Flase

表达式:$.[?(@.goodsId == 55280465)].[?(@.avgUv7D)] 获取值为[]

可以使用[[[[http://jsonpath.herokuapp.com/?path=$.store.book\[\]\(http://jsonpath.herokuapp.com/?path=$.store.book\[\)\](http://jsonpath.herokuapp.com/?path=$.store.book[]%28http://jsonpath.herokuapp.com/?path=$.store.book[%29\)\] 来验证你的表达式哦~

Copyright © GoApi 2018 all right reserved,powered by Gitbook该文件修订时间: 2019-07-23 20:40:34

results matching ""

    No results matching ""