JMeter中JSR223 Groovy替换JSON字符串问题求助
解决JMeter JSR223 Groovy中JSON替换变量的问题
你的问题出在两个关键细节上:Groovy中获取JMeter变量的方式有误,以及replaceAll方法的正则特殊字符未做处理。我给你几个可行的解决方案:
方案1:使用普通字符串替换(推荐,简单直接)
replace方法是纯字符串匹配替换,不需要处理正则转义,非常适合你这种固定内容替换的场景:
// 先获取JMeter中的myVal变量 def targetSeconds = vars.get("myVal") // 执行替换操作 str1 = str1.replace('"ABC": {"seconds": 20}', '"ABC": {"seconds": ' + targetSeconds + '}')
方案2:若坚持使用replaceAll(需转义正则特殊字符)
replaceAll的第一个参数是正则表达式,而{、}在正则语法里是特殊字符(用于表示重复次数),必须转义才能正确匹配目标内容:
def targetSeconds = vars.get("myVal") // 转义{和}为\\{、\\},确保正则引擎识别为普通字符 str1 = str1.replaceAll('"ABC": \\{"seconds": 20\\}', '"ABC": {"seconds": ' + targetSeconds + '}')
方案3:用JSON解析修改(最稳妥,适配复杂JSON)
如果你的JSON结构可能存在格式变化(比如空格、换行不同),字符串替换容易失效,这时用Groovy的JSON工具类解析修改更可靠:
import groovy.json.JsonSlurper import groovy.json.JsonBuilder // 解析原JSON字符串为对象 def jsonSlurper = new JsonSlurper() def jsonObj = jsonSlurper.parseText(str1) // 修改ABC节点的seconds值,将myVal转为整数类型(按需调整) jsonObj.ABC.seconds = vars.get("myVal") as Integer // 重新生成JSON字符串 def jsonBuilder = new JsonBuilder(jsonObj) str1 = jsonBuilder.toString() // 若需要格式化输出,可改用toPrettyString()
你的原代码失败原因解析
- JMeter变量获取错误:在Groovy代码中不能直接使用
${myVal},Groovy无法识别JMeter的占位符语法,必须通过vars.get("myVal")方法获取变量值。 - 正则特殊字符未转义:
replaceAll的第一个参数是正则表达式,你原字符串里的{和}没有转义,会被正则引擎当作语法符号处理,导致无法匹配到目标内容。
内容的提问来源于stack exchange,提问作者Ghost
相关产品推荐
相关产品推荐

