JMeter 5.5:从字符串格式JSON响应提取partnerJoin为Yes的ID值
解决方案
Groovy脚本方案(推荐)
Groovy在JMeter中性能优于BeanShell,且自带JSON解析工具,无需额外依赖,步骤如下:
- 在目标HTTP请求下添加JSR223 PostProcessor
- 在PostProcessor的"Script Language"下拉框选择
groovy - 输入以下脚本:
// 获取接口响应体内容 def response = prev.getResponseDataAsString() // 解析外层JSON结构,取出data1字段的字符串内容 def outerJson = new groovy.json.JsonSlurper().parseText(response) def data1Str = outerJson.data1 // 将data1的字符串解析为JSON数组 def data1Array = new groovy.json.JsonSlurper().parseText(data1Str) // 遍历数组,筛选出partnerJoin值为"Yes"的对象id def targetIds = [] data1Array.each { item -> if (item.partnerJoin == "Yes") { targetIds.add(item.id.toString()) } } // 将结果存入JMeter变量: // 若需多个id用逗号分隔,执行下面一行 vars.put("targetId", targetIds.join(",")) // 若仅需第一个符合条件的id,替换为以下代码块 // if (targetIds.size() > 0) { // vars.put("targetId", targetIds[0]) // }
脚本说明:
prev是JMeter内置对象,用于获取当前请求的响应数据JsonSlurper是Groovy原生的JSON解析类,无需额外引入依赖vars是JMeter内置对象,用于将提取到的id存入变量,后续可通过${targetId}引用
BeanShell脚本方案
若需使用BeanShell,需依赖JMeter自带的org.json包,步骤如下:
- 在目标HTTP请求下添加BeanShell PostProcessor
- 输入以下脚本:
import org.json.JSONObject; import org.json.JSONArray; // 获取接口响应体 String response = prev.getResponseDataAsString(); // 解析外层JSON,获取data1字段的字符串 JSONObject outerJson = new JSONObject(response); String data1Str = outerJson.getString("data1"); // 将data1字符串解析为JSON数组 JSONArray data1Array = new JSONArray(data1Str); // 遍历数组筛选目标id String targetId = ""; for (int i = 0; i < data1Array.length(); i++) { JSONObject item = data1Array.getJSONObject(i); if ("Yes".equals(item.getString("partnerJoin"))) { // 多个id用逗号拼接 targetId += item.getString("id") + ","; // 仅需第一个id则取消下面两行注释,同时注释上一行 // targetId = item.getString("id"); // break; } } // 移除末尾多余的逗号(多id场景) if (targetId.endsWith(",")) { targetId = targetId.substring(0, targetId.length() - 1); } // 存入JMeter变量 vars.put("targetId", targetId);
脚本说明:
- 需确保JMeter的
lib目录下存在json.jar(JMeter 5.5默认自带) - 若出现类找不到的错误,需手动下载该jar包放入
lib目录并重启JMeter
内容的提问来源于stack exchange,提问作者suravi
相关产品推荐
相关产品推荐

