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] |
| {$.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的内容是否等于杭州。判断校验返回值是否为空值或非空值,则值列直接输入
null或not null(不区分大小写),可判断校验的内容是否为null或not null。如参数列输入data.co,值列输入null,判断校验data.co的值是否为null。判断校验返回值为字符串null、NULL或Null时,则值列直接输入
<null>或<NULL>或<Null>,可判断校验的内容是否为字符串null或NULL或Null。如参数列输入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的值是否是滨江||西湖其中一个。