在JMeter中使用JsonPath的!=条件提取JSON值,获取非Jenkins类型实例ID
在JMeter中使用JsonPath的!=条件提取指定值
没问题,这事儿我门儿清!要从你提供的JSON数据里提取所有type不等于JENKINS的实例对应的id,用JMeter的JSON Extractor配合正确的JsonPath表达式就能轻松搞定,具体操作如下:
核心JsonPath表达式
直接用这个表达式就能过滤并提取目标值:
$..data[?(@.type != 'JENKINS')].id
我给你拆解下这个表达式的含义:
$..data:递归遍历整个JSON结构,找到所有名为data的数组[?(@.type != 'JENKINS')]:筛选出数组中type字段值不等于JENKINS的元素(注意这里大小写敏感,要和JSON里的字段值完全匹配).id:从筛选后的元素中提取id字段的值
JMeter中的配置步骤
- 在需要提取数据的Sampler下方,右键选择「添加」→「后置处理器」→「JSON Extractor」
- 在JSON Extractor的配置面板里填写以下内容:
- 引用名称:比如填
non_jenkins_ids(后续可以通过这个变量名访问提取到的结果) - JSON Path表达式:粘贴上面的
$..data[?(@.type != 'JENKINS')].id - 匹配数字:留空或者填
-1(表示提取所有符合条件的id值,而不是只取第一个) - 默认值:可以填
NO_MATCH_FOUND(当没有符合条件的元素时,变量会返回这个值)
- 引用名称:比如填
验证效果
比如你的JSON数据里如果有一个type为GITLAB的实例:
{ "data": [ { "id": "35002399-6fd7-40b7-b0d0-8be64e4ec09c", "type": "JENKINS" }, { "id": "12345678-abcdef-1234-5678-90abcdef1234", "type": "GITLAB" } ] }
那提取后,non_jenkins_ids变量就会存储12345678-abcdef-1234-5678-90abcdef1234;如果有多个符合条件的元素,变量会以逗号分隔的形式返回所有id。
内容的提问来源于stack exchange,提问作者Sergey Konotop
相关产品推荐
相关产品推荐

