如何从Groovy的Map数组键值对中取值?附代码及变量现象
解决Groovy中从Map对象提取键值对的问题
看起来你已经通过JMeter的Groovy脚本成功从JSON响应里拿到了包含label和value的Map对象(比如[label:Red, value:8]),但可能在单独提取这两个字段的值时遇到了小问题?我来帮你优化一下脚本,确保能准确获取并存储你需要的内容:
修正后的完整脚本
import org.apache.commons.lang3.RandomUtils import com.jayway.jsonpath.JsonPath // 从响应字符串解析出options数组 def options = JsonPath.read(prev.getResponseDataAsString(), '$.options') // 随机挑选一个option对象 def randomOption = options.get(RandomUtils.nextInt(0, options.size())) // 提取code并存入JMeter变量(转成字符串避免类型问题) def code = randomOption.get("code") vars.put('code1', code.toString()) // 获取当前option下的values数组 def values = randomOption.get('values') // 随机挑选一个value项(这是一个Map) def randomValue = values.get(RandomUtils.nextInt(0, values.size())) // 从Map中单独提取label和value值 def selectedLabel = randomValue['label'] // 等价于 randomValue.get('label') def selectedValue = randomValue['value'] // 等价于 randomValue.get('value') // 将提取结果存入JMeter变量 vars.put('SelectedLabel', selectedLabel.toString()) vars.put('SelectedValue', selectedValue.toString()) // 如果需要保留整个Map的字符串形式,也可以存起来 vars.put('randomValueMap', randomValue.toString())
关键优化点说明
- 类型转换:JMeter的
vars.put()方法要求存入的必须是字符串类型,所以我给每个提取的值都加了.toString(),避免因为类型不匹配导致变量存储失败或者显示异常。 - Map取值方式:Groovy里从Map取值支持两种写法:
map['key']和map.get('key'),你原来的写法是对的,但get()方法还可以加默认值(比如randomValue.get('value', 'N/A')),如果键不存在时会返回默认值,更健壮。 - 变量命名:我把变量名改成了更直观的
SelectedLabel和SelectedValue,后续在JMeter里引用的时候更容易识别。
现在你可以直接用${SelectedLabel}或${SelectedValue}来引用单独的字段值,而不是整个Map的字符串啦。
内容的提问来源于stack exchange,提问作者Siddish
相关产品推荐
相关产品推荐

