jsonPath - 如何通过匹配子字符串来过滤结果

Riz*_*ous 4 json jmeter jsonpath

我有这样的结构:

{"payload": {

    "Item1": {
      "property1": "Sunday",
      "property2": "suffering_8890"
    },

    "Item2": {
      "property1": "Monday",
      "property2": "misery_0776"
    },

    "Item3": {
      "property1": "Tuesday",
      "property2": "pain_6756"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我需要包含某个子字符串(即“misery”)的 property2 值。最终我只需要 4 位代码,但即使获得完整的值也可以。我可以使用以下方法获取所有 property2 值的列表:

$..property2
Run Code Online (Sandbox Code Playgroud)

这将返回:

Result[0] = suffering_8890
Result[1] = misery_0776
Result[2] = pain_6756
Run Code Online (Sandbox Code Playgroud)

如何过滤它,以便它只给出包含子字符串“misery”的结果?

Dmi*_*i T 6

关于完整值,您可以使用过滤器运算符,例如:

$..[?(@.property2 =~ /misery.*?/i)].property2
Run Code Online (Sandbox Code Playgroud)

演示:

在此输入图像描述

您可以使用正则表达式提取器从变量中提取 4 位数字的值


如果您想一次性完成此操作:

  1. 添加 JSR223 PostProcessor 作为返回上述 JSON 的请求的子级
  2. 将以下代码放入“脚本”区域

    vars.put('misery', ((com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$..[?(@.property2 =~ /misery.*?/i)].property2').get(0) =~ ('(\\d+)'))[0][1]))
    
    Run Code Online (Sandbox Code Playgroud)
  3. ${misery}根据需要参考提取的值

详细信息:Apache Groovy - 为什么以及如何使用它