JMeter 5.0(Groovy):如何提取嵌套JSON的v1值并合并为数组?
解决方案
1. 添加JSR223 PostProcessor
在目标请求节点下添加JSR223 PostProcessor,语言选择Groovy(JMeter 5.0对Groovy支持完善,性能优于其他脚本语言)。
2. Groovy处理代码
直接利用Groovy的JSON解析工具处理嵌套结构,代码如下:
import groovy.json.JsonSlurper import groovy.json.JsonBuilder // 获取接口原始响应文本 def rawResponse = prev.getResponseDataAsString() def jsonSlurper = new JsonSlurper() def originalData = jsonSlurper.parseText(rawResponse) // 遍历处理每个规则对象 def processedResult = originalData.collect { rule -> // 保留rid、rname等核心字段 def processedRule = [ rid: rule.rid, rname: rule.rname, // 如需保留其他顶层字段,直接按此格式追加 con: [ // 保留con对象中的其他字段(例如type、code等,按需添加) type: rule.con.type, // 提取values数组内所有v1值,生成新的value数组 value: rule.con.values.collect { item -> item.v1 } ] ] return processedRule } // 将处理后的数据转为格式化JSON字符串 def jsonBuilder = new JsonBuilder(processedResult) def formattedJson = jsonBuilder.toPrettyString() // 可选:将处理结果存入JMeter变量,供后续逻辑使用 vars.put("processedResponse", formattedJson) // 可选:替换原始响应,直接在结果树中查看处理后的格式 prev.setResponseData(formattedJson.getBytes("UTF-8"))
3. 关键逻辑说明
rule.con.values.collect { item -> item.v1 }:这行代码是核心,遍历con对象下的values数组,提取每个元素的v1值,自动合并为新的value数组。- 若
con对象还有其他需要保留的字段(如type、desc),直接在con的Map结构中追加即可。 - 处理后的JSON可存入变量供后续请求使用,也可替换原始响应方便调试查看。
4. 验证方式
运行测试后,查看结果树中的响应数据,即可确认每个规则的rid、rname保留完整,con对象下的values已被替换为包含所有v1值的value数组。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

