JSON匹配

以JsonPath语法、SpEl语法格式定义参数列的值,根据值列规则输入相应的值或表达式进行参数的判断校验。


JsonPath:
基础描述符 描述
$ 查询的根节点对象,用于表示一个json数据,可以是数组或对象
. 获取子节点
@ 过滤器断言处理的当前节点对象
* 获取所有节点
.. 递归搜索,筛选所有符合条件的节点
?() 过滤器表达式,筛选操作
[start:end] 数组片段,区间为[start,end),不包含end
[A]或[A,B] 迭代器下标,表示一个或多个数组下标

如响应body为:

BODY
"{...}":
"data":{
  "city": "杭州",
  "code":200,
  "msg":"成功!",
  "co":null,
  "aqi":"66"
  "forecast": [{
      "position_name": "滨江",
      "aqi": 62,
      "level": "良",
      "primary_pollutant": "null",
      "pm25": "43",
      "pm10": "73",
      "type":"阴"
    }, {
      "position_name": "西溪",
      "aqi": 68,
      "level": "优",
      "primary_pollutant": "null",
      "pm25": "44",
      "pm10": "73"
      "type":"阴"
    },
    ....
  ]
}

表示支持JsonPath语法定义判断校验返回值是否符合预期值,示例如下:

表达式 含义 获取值
$.data.forecast[0].position_name 获取data.forecast[0]对象中position_name值。 滨江
$.data.forecast[*].aqi 使用迭代器,获取data中forecast数组中所有aqi的值。 [62,68]
$..forecast[?(@.aqi >= 60)].primary_pollutant 使用迭代器,获取forecast数组中所有的aqi值大于等于60的primary_pollutant值。 ['null','null']
{$.data.forecast[*].aqi}[0] 使用迭代器,获取data中forecast数组中aqi的第一个值。 62
$.data.forecast[?(@.level=="良")].pm25 获取data中forecast数组中level等于"良"对象,并获取该对象中pm25的值。 [43]
$.data.forecast[?((@.level=="良")&&(@.aqi==62))].pm10 获取data中forecast数组中level等于“良”与等于aqi等于63的所有对象,并获取该对象中pm10的值。 [73]
$.data.forecast[?(@.aqi>65)].position_name 获取data中forecast数组中aqi大于65的所有对象,并获取该对象中position_name值。 ["西溪"]

注:可以使用小工具验证填写的Jsonpath表达式:http://jsonpath.herokuapp.com/。

SpEl:

表示支持SpEl语法定义判断校验返回值是否符合预期值,示例如下:

表达式 含义 用法示例 获取值
{表达式a}?:{表达式b} 表示若表达式a为真(获取到的值不为null),则获取表达式a的值。否则获取表达式b的值。 {$.data.city}?:{$.data.msg} 杭州
{表达式a} 运算符 表示若表达式a值满足关系运算表达式,则值为true,反之为false ({$.data.city} == "杭州" and {$.data.code} == 200) true
{表达式a}.?[变量条件b] 表示获取从表达式a值中满足变量条件b的值。 {$.data.forecast[*].type}.?[#this=="阴"] ["阴","阴"]
({表达式a} 条件1 and {表达式b} 条件2 ...) ? {表达式c}:{表达式d} ”与“,表示若表达式a满足条件1且表达式b满足条件2(同时满足)时,则获取表达式c的值,否则获取表达式d的值。 ({$.data.city} == "杭州" and {$.data.code} >=200) ? {$.data.city}:{$.data.msg} 杭州
({表达式a} 条件1 or {表达式b} 条件2 ...)? {表达式c}:{表达式d} "或",表示若表达式a满足条件1获表达式b满足条件2时,则获取表达式c的值,否则获取表达式d的值。 ({$.data.city} != "杭州" or {$.data.code} >=200) ? {$.data.city}:{$.data.msg} 杭州
!({表达式a} 条件1 and !({表达式b} 条件2) ...)? {表达式c}:{表达式d} "非",表示若表达式a不满足条件1且表达式b不满足条件2时,则获取表达式c的值,否则获取表达式d的值。 ({$.data.city} == "杭州" and !({$.data.code} >=1)) ? {$.data.city}:{$.data.msg} 成功!

同时也支持判断校验返回值是否等于参数列的预期值,值列的输入规则如下:

  • 判断校验返回值是否等于某值,则值列直接输入该值。如参数列输入data.city,值列输入杭州,可判断校验data.city的内容是否等于杭州

  • 判断校验返回值是否为空值或非空值,则值列直接输入nullnot null(不区分大小写),可判断校验的内容是否为null或not null。如参数列输入data.co,值列输入null,判断校验data.co的值是否为null

  • 判断校验返回值为字符串null、NULL或Null时,则值列直接输入<null><NULL><Null>,可判断校验的内容是否为字符串nullNULLNull。如参数列输入data[0].primary_pollutant,值列输入<null>,判断校验data[0].primary_pollutant的值是否为null

  • 判断校验返回值的数值大小,则值列输入比较运算符加数字的表达式,支持>>=<<===!=。如参数列输入data[0].aqi值列输入>=66判断校验data[0].aqi内容是否大于等于62

  • 判断校验返回值数值之间的比较,则值列输入比较运算符加比较对象的表达式,支持>>=<<=!===。如判断校验aqi值与data[0].aqi值比较,参数列输入aqi值列输入>=$(data[0].aqi),判断校验aqi的值是否大于等于data[0].aqi的值。

  • 判断校验返回返回值数值,则值列可输入加减乘除逻辑运算与比较运算符的表达式,支持>>=<<=!===。如判断校验code值,值列输入>=(5+2*100-5/1)判断code的值是否大于等于逻辑运算表达式5+2*100-5/1值。

  • 判断校验返回值是否等于多个字符串中任意一个,若多个字符串则使用符号||隔开。如参数列输入data[0].position_name,值列输入滨江||西湖,判断校验data[0].position_name的值是否是滨江||西湖其中一个。

Copyright © GoApi 2018 all right reserved,powered by Gitbook该文件修订时间: 2020-03-16 10:40:46

results matching ""

    No results matching ""