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/。更多Jsonpath语法可参考:http://note.youdao.com/noteshare?id=afc790c18d7832f0dc26fc8aafd2ed35⊂=F5349CFA424C4CD79DBF7DAFEF0EA058
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} | 成功! |
注:更多Spring Expression Language(SpEL)语法可参考:http://note.youdao.com/noteshare?id=52b2e37a2f5166bda3e016913fec62dd⊂=FC669B74FD92434E8F0FE06F0C338E0D
同时也支持判断校验返回值是否等于参数列的预期值,值列的输入规则如下:
判断校验返回值是否等于某值,则值列直接输入该值。如参数列输入
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
的值是否是滨江||西湖
其中一个。