You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

你的原代码失败原因解析

  1. JMeter变量获取错误:在Groovy代码中不能直接使用${myVal},Groovy无法识别JMeter的占位符语法,必须通过vars.get("myVal")方法获取变量值。
  2. 正则特殊字符未转义:replaceAll的第一个参数是正则表达式,你原字符串里的{和}没有转义,会被正则引擎当作语法符号处理,导致无法匹配到目标内容。

内容的提问来源于stack exchange,提问作者Ghost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:42:43