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

时间:2019-03-04 22:26:54

标签: json jmeter jsonpath

我有这样的结构:

{"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

如何过滤它,使其仅给出包含子字符串“苦难”的结果?

2 个答案:

答案 0 :(得分:2)

关于全部价值,您可以使用Filter Operator,例如:

$..[?(@.property2 =~ /misery.*?/i)].property2

演示:

enter image description here

您可以使用Regular Expression Extractor

从变量中提取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]))
    
  3. 在需要时将提取的值引用为${misery}

更多信息:Apache Groovy - Why and How You Should Use It

答案 1 :(得分:0)

对于上述情况,您也可以使用regular expression extractor来获取如下所示的四位数

property2": "misery_(.*)"

这将帮助您立即将四位数的代码保存在JMeter变量中。如果您坚持要使用jsonpath从JSON中找到所需的值,则可以使用JSON过滤器,如下所示:-

$..[?(@.property2.indexOf('misery')>=0)]..property2