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

JMeter使用JSR223后置处理器提取参数遇Json解析错误求助

JMeter JSR223后置处理器提取请求体数据报错排查与解决

问题重现

使用JSR223后置处理器提取请求体中BatchName参数时触发JSON解析错误,代码如下:

String requestBody = sampler.getArguments().getArgument(0).getValue()
String BatchName = new JsonSlurper().setType(JsonParserType.LAX).parseText(requestBody).params.BatchName
vars.put('BatchName', BatchName)
log.info('BatchName: ' + BatchName)

执行后报错:

原因:groovy.json.JsonException:预期为'}'或',',但当前读取的字符为'o',其ASCII值为111。当前读取的字符为'o',ASCII值为111,预期为'}'或',',行号1,索引1

需求是从请求样本中提取BatchName,供后续取样器调用。

错误原因

该错误表明获取到的requestBody不是有效的JSON格式,可能的场景包括:

  • sampler.getArguments().getArgument(0).getValue()拿到的不是JSON请求体(比如是表单键值对、空字符串或其他非JSON内容)
  • 请求体本身存在JSON语法错误(比如开头不是{、引号不匹配等)
  • 错误获取了请求参数而非请求体(比如HTTP请求的raw JSON体不会被包含在arguments中)

解决方案

1. 先确认请求体实际内容

在代码开头添加日志打印,明确拿到的requestBody是什么:

String requestBody = sampler.getArguments().getArgument(0).getValue()
log.info("当前获取的请求体内容: " + requestBody)
// 后续解析代码...

通过JMeter日志查看输出,判断是否为预期的JSON格式。

2. 修正请求体获取方式(针对HTTP请求)

如果是发送raw JSON的HTTP请求,sampler.getArguments()通常无法正确获取请求体,改用getBodyAsString()方法更可靠:

String requestBody = ctx.getCurrentSampler().getBodyAsString()

3. 安全解析JSON并添加异常处理

添加异常捕获和空值判断,避免脚本中断,同时提升代码健壮性:

String requestBody = ctx.getCurrentSampler().getBodyAsString()
log.info("请求体内容: " + requestBody)

try {
    def json = new JsonSlurper().setType(JsonParserType.LAX).parseText(requestBody)
    // 用安全导航运算符避免空指针异常
    String batchName = json.params?.BatchName
    
    if (batchName) {
        vars.put('BatchName', batchName)
        log.info("成功提取BatchName: ${batchName}")
    } else {
        log.warn("请求体中未找到params.BatchName字段")
    }
} catch (Exception e) {
    log.error("JSON解析失败: ${e.getMessage()}", e)
}

4. 非JSON请求体的处理

如果请求体是表单格式(如key1=value1&key2=value2),则不能用JsonSlurper解析,需改用参数提取方式:

// 假设BatchName是表单参数
String batchName = sampler.getArguments().getArgument("BatchName")?.getValue()
if (batchName) {
    vars.put('BatchName', batchName)
    log.info("成功提取BatchName: ${batchName}")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:50:26