JMeter中使用If控制器验证JSON对象是否存在
JMeter判断JSON响应是否存在并控制采样器执行的方法
针对你的需求——判断第一个采样器的响应是否为JSON对象(包括空{}或非空的JSON结构),进而控制第二个采样器是否运行,这里给你两种实用方案:
方案一:JSON Path Extractor + If Controller
这是最直接的方式,利用JSON Path匹配根对象来判断:
- 给第一个采样器添加 JSON Path Extractor(后置处理器):
- 参考名称:输入
hasJsonObject(自定义变量名) - JSON Path表达式:填
$(代表整个JSON根对象,只要响应是有效的JSON对象,不管空还是有内容,都会匹配成功) - 匹配数字:填
1(取第一个匹配结果)
- 参考名称:输入
- 添加 If Controller,把第二个采样器拖进这个控制器里:
- 在If Controller的“条件”框中输入表达式:
这个表达式的作用是:如果${__jexl3(!${__isVarEmpty(hasJsonObject)},)}hasJsonObject变量不为空(说明匹配到了JSON对象),就执行控制器内的第二个采样器。
- 在If Controller的“条件”框中输入表达式:
方案二:JSR223 PostProcessor + If Controller
如果需要更严谨的判断(比如排除响应是空字符串而非{}的情况),可以用Groovy脚本直接校验:
- 给第一个采样器添加 JSR223 PostProcessor:
- 脚本语言选
groovy,在脚本框中输入:try { def response = prev.getResponseDataAsString().trim() // 判断是否是JSON对象格式(包括空{}) if ((response.startsWith("{") && response.endsWith("}"))) { vars.put("jsonExists", "true") } else { vars.put("jsonExists", "false") } } catch (Exception e) { // 解析失败说明不是有效JSON对象 vars.put("jsonExists", "false") }
- 脚本语言选
- 同样用 If Controller包裹第二个采样器,条件填:
${jsonExists} == true
注意点
- 如果第一个采样器的响应可能是
null或者空字符串(不是{}),方案二更合适,能精准区分“空JSON对象”和“无响应内容”; - JMeter的If Controller记得勾选“Interpret Condition as Variable Expression?”(默认已勾选),确保表达式能正确解析。
内容的提问来源于stack exchange,提问作者Saisree
相关产品推荐
相关产品推荐

