我有这样的结构:
{"payload": {
"Item1": {
"property1": "Sunday",
"property2": "suffering_8890"
},
"Item2": {
"property1": "Monday",
"property2": "misery_0776"
},
"Item3": {
"property1": "Tuesday",
"property2": "pain_6756"
}
}
}
我需要包含某个子字符串(即“苦难”)的property2值。最终,我只需要4位代码,但即使获得全部价值也可以。我可以使用以下方法获取所有property2值的列表:
$..property2
这将返回:
Result[0] = suffering_8890
Result[1] = misery_0776
Result[2] = pain_6756
如何过滤它,使其仅给出包含子字符串“苦难”的结果?
答案 0 :(得分:2)
关于全部价值,您可以使用Filter Operator,例如:
$..[?(@.property2 =~ /misery.*?/i)].property2
演示:
您可以使用Regular Expression Extractor
从变量中提取4位数字值如果要一次性完成此操作:
将以下代码放入“脚本”区域
vars.put('misery', ((com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$..[?(@.property2 =~ /misery.*?/i)].property2').get(0) =~ ('(\\d+)'))[0][1]))
${misery}
答案 1 :(得分:0)
对于上述情况,您也可以使用regular expression extractor来获取如下所示的四位数
property2": "misery_(.*)"
这将帮助您立即将四位数的代码保存在JMeter变量中。如果您坚持要使用jsonpath从JSON中找到所需的值,则可以使用JSON过滤器,如下所示:-
$..[?(@.property2.indexOf('misery')>=0)]..property2