如何在Groovy脚本中提取JSON的id值升序排序后用于forEach控制器
Groovy实现提取排序ID并对接forEach控制器
场景1:JMeter环境(配合forEach控制器使用)
你需要将脚本放在GET请求的JSR223后置处理器中,语言选择Groovy即可,完整代码如下:
import groovy.json.JsonSlurper // 解析上一个GET请求的响应内容 def responseJson = new JsonSlurper().parse(prev.getResponseDataAsString().getBytes()) // 提取所有id字段并按升序排序 def sortedIdList = responseJson*.id.sort() // 将排序后的ID按规则存入JMeter变量,供forEach控制器读取 sortedIdList.eachWithIndex { id, index -> vars.put("sorted_id_${index + 1}", id.toString()) } // 存储ID总数,可用于后续逻辑校验 vars.put("sorted_id_count", sortedIdList.size().toString())
forEach控制器配置步骤:
- 输入变量前缀填写
sorted_id - 输出变量名称填写你后续请求需要引用的变量名,例如
current_use_id - 勾选「Add "_" before number?」选项
配置完成后,每次循环控制器会按升序取出一个ID存入你设置的输出变量,直接用${current_use_id}即可引用。
场景2:普通Groovy程序使用
如果不需要对接JMeter,直接处理JSON字符串的实现代码如下:
import groovy.json.JsonSlurper // 替换为你实际GET请求返回的JSON字符串 def responseContent = ''' [ { "id": 1410, "name": "ESPav2", "orgId": "TestServer1", "createdDate": "2021-09-23T08:47:39.5553398", "isActive": true }, { "id": 1406, "name": "ESPav1", "orgId": "TestServer1", "createdDate": "2021-09-23T12:15:32.982959", "isActive": true }, { "id": 1409, "name": "sub1", "orgId": "TestServer1", "createdDate": "2021-09-23T17:45:58.9410605", "isActive": true }, { "id": 1408, "name": "bl", "orgId": "TestServer1", "createdDate": "2021-09-24T04:18:26.6323815", "isActive": true }, { "id": 1407, "name": "Test", "orgId": "TestServer1", "createdDate": "2021-09-24T04:19:07.3712661", "isActive": true }, { "id": 1405, "name": "ESPav2", "orgId": "TestServer1", "createdDate": "2021-09-24T05:02:58.8471913", "isActive": true } ] ''' // 解析JSON def jsonData = new JsonSlurper().parseText(responseContent) // 提取并排序ID def sortedIds = jsonData*.id.sort() // 遍历执行逻辑,等价于forEach效果 sortedIds.each { id -> // 此处替换为你需要执行的业务逻辑 println "当前处理ID:${id}" }
核心语法说明
代码中的responseJson*.id是Groovy的扩展运算符,等价于遍历数组所有元素提取id属性,相比手动循环写法更简洁高效;sort()方法对数字类型默认执行升序排序,无需额外传参。
内容的提问来源于stack exchange,提问作者user16991483
相关产品推荐
相关产品推荐

