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

如何在JMeter带参请求中将JSON的"null"替换为null?

解决JMeter中JSON"null"转null的问题

我之前也遇到过ESB接口对JSON格式要求特别严格的情况,给你几个实用的解决办法,你可以根据自己的场景选最合适的:

方法1:使用JMeter内置字符串替换函数(快速简单)

如果你的HTTP请求Body是直接编写的JSON模板,或者通过变量引用参数,用__strReplaceAll函数就能批量替换所有带引号的"null"为不带引号的null。

  • 假设你的请求Body是通过变量${requestBody}引用的,直接改成:
${__strReplaceAll(${requestBody},"\"null\"",null,)}
  • 如果是直接写在Body里的JSON,也可以把整个JSON包在函数里:
${__strReplaceAll({"ID": "${ID}", "ProductName": "${ProductName}", ...},"\"null\"",null,)}

注意:这个函数是JMeter 5.0及以上版本才支持的,如果你的JMeter版本较老,要么升级版本,要么用__strReplace多次替换单个字段的"null"

方法2:用JSR223 PreProcessor编写Groovy脚本(灵活高效)

面对300个参数的场景,函数替换可能不够灵活,用Groovy脚本解析整个JSON并批量替换是更可靠的方式,而且Groovy在JMeter里的执行性能很好。

步骤如下:

  1. 在你的HTTP请求节点前添加一个JSR223 PreProcessor
  2. 在脚本编辑区输入以下代码:
// 获取原始请求Body内容(如果是从变量读取就用vars.get("requestBody"))
def originalBody = sampler.getArguments().getArgument(0).getValue()
// 解析JSON字符串
def json = new groovy.json.JsonSlurper().parseText(originalBody)

// 递归遍历所有字段,将字符串"null"替换为真正的null
def replaceNulls(obj) {
    if (obj instanceof Map) {
        obj.each { k, v ->
            obj[k] = v == "null" ? null : replaceNulls(v)
        }
    } else if (obj instanceof List) {
        obj.eachWithIndex { item, index ->
            obj[index] = item == "null" ? null : replaceNulls(item)
        }
    }
    return obj
}

// 处理后的JSON重新写入请求Body
def processedJson = replaceNulls(json)
sampler.getArguments().getArgument(0).setValue(new groovy.json.JsonBuilder(processedJson).toPrettyString())

这个脚本会自动遍历JSON里的所有字段,不管多少个参数,只要值是字符串"null"就会替换成不带引号的null,完全适配你的场景。

方法3:从数据库读取时直接处理(源头解决)

如果你的数据是通过JDBC请求从旧数据库获取的,可以在SQL查询阶段就把字符串"null"转换成null值,从源头避免后续的替换操作。比如:

SELECT 
    ID,
    CASE WHEN ProductName = 'null' THEN NULL ELSE ProductName END AS ProductName,
    CASE WHEN Name = 'null' THEN NULL ELSE Name END AS Name,
    -- 其他300个字段依次类推
FROM your_old_table

这个方法需要写300个CASE语句,虽然繁琐,但好处是后续请求无需额外处理,一劳永逸。

验证方式

替换完成后,你可以通过JMeter的View Results Tree组件查看HTTP请求的实际发送内容,确认所有"null"都已变成不带引号的null,这样ESB服务器就不会再报错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:26:31