jsonPath - 如何通过匹配子字符串来过滤结果
jsonPath - how to filter results by matching substring
我有这样的结构:
{"payload": {
"Item1": {
"property1": "Sunday",
"property2": "suffering_8890"
},
"Item2": {
"property1": "Monday",
"property2": "misery_0776"
},
"Item3": {
"property1": "Tuesday",
"property2": "pain_6756"
}
}
}
我需要包含特定子字符串(即 "misery")的 property2 值。最终我只需要 4 位代码,但即使获得完整值也可以。我可以使用以下方法获取所有 property2 值的列表:
$..property2
这个returns:
Result[0] = suffering_8890
Result[1] = misery_0776
Result[2] = pain_6756
如何过滤它,以便它只提供包含子字符串 "misery" 的结果?
对于上述场景,您也可以使用 regular expression extractor 来获取如下所示的四位数
property2": "misery_(.*)"
这将帮助您立即将四位代码保存在 JMeter 变量中。如果您坚持要使用 jsonpath 从 JSON 中找出所需的值,您可以使用 JSON 过滤器,如下所示:-
$..[?(@.property2.indexOf('misery')>=0)]..property2
关于完整值,您可以使用 Filter Operator,例如:
$..[?(@.property2 =~ /misery.*?/i)].property2
演示:
您可以使用 Regular Expression Extractor
从变量中提取 4 位数的值
如果您想一次性完成:
- 将 JSR223 后处理器添加为 returns 以上 JSON
请求的子项
将以下代码放入"Script"区
vars.put('misery', ((com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$..[?(@.property2 =~ /misery.*?/i)].property2').get(0) =~ ('(\d+)'))[0][1]))
- 在需要时将提取的值引用为
${misery}
我有这样的结构:
{"payload": {
"Item1": {
"property1": "Sunday",
"property2": "suffering_8890"
},
"Item2": {
"property1": "Monday",
"property2": "misery_0776"
},
"Item3": {
"property1": "Tuesday",
"property2": "pain_6756"
}
}
}
我需要包含特定子字符串(即 "misery")的 property2 值。最终我只需要 4 位代码,但即使获得完整值也可以。我可以使用以下方法获取所有 property2 值的列表:
$..property2
这个returns:
Result[0] = suffering_8890
Result[1] = misery_0776
Result[2] = pain_6756
如何过滤它,以便它只提供包含子字符串 "misery" 的结果?
对于上述场景,您也可以使用 regular expression extractor 来获取如下所示的四位数
property2": "misery_(.*)"
这将帮助您立即将四位代码保存在 JMeter 变量中。如果您坚持要使用 jsonpath 从 JSON 中找出所需的值,您可以使用 JSON 过滤器,如下所示:-
$..[?(@.property2.indexOf('misery')>=0)]..property2
关于完整值,您可以使用 Filter Operator,例如:
$..[?(@.property2 =~ /misery.*?/i)].property2
演示:
您可以使用 Regular Expression Extractor
从变量中提取 4 位数的值如果您想一次性完成:
- 将 JSR223 后处理器添加为 returns 以上 JSON 请求的子项
将以下代码放入"Script"区
vars.put('misery', ((com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$..[?(@.property2 =~ /misery.*?/i)].property2').get(0) =~ ('(\d+)'))[0][1]))
- 在需要时将提取的值引用为
${misery}