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

JMeter JSR223后置处理器用JSON.stringify()丢失小数尾零求助

问题本质

JSON规范中的number类型不存储小数精度信息,接口返回的120.000被解析为数值对象后就会丢失尾零格式,JSON.stringify()默认会省略无意义的尾零,最终仅输出120。

解决方案

方案1:直接使用原始响应文本(优先推荐)

不需要将响应解析为JSON对象再序列化,直接获取接口返回的原始响应字符串即可完整保留原始数值格式,JSR223中获取原始响应的代码如下:
def rawResponse = prev.getResponseDataAsString()
后续可直接基于该原始字符串提取所需字段,或直接存储使用,不会出现尾零截断问题。

方案2:Groovy引擎下自定义JSON序列化规则

如果你使用JSR223推荐的Groovy脚本引擎,且必须先解析JSON做逻辑处理后再序列化输出,可以通过自定义JSON生成器强制保留指定小数位数,示例代码:

import groovy.json.JsonGenerator
import groovy.json.JsonSlurper

// 解析响应JSON
def responseJson = new JsonSlurper().parse(prev.getResponseData())

// 配置JSON生成器,强制BigDecimal类型数值保留3位小数
def jsonGenerator = new JsonGenerator.Options()
    .addConverter(BigDecimal) { num ->
        return String.format("%.3f", num)
    }
    .build()

// 序列化得到保留尾零的JSON字符串
def resultJson = jsonGenerator.toJson(responseJson)

方案3:JavaScript引擎下自定义JSON.stringify规则

如果你当前JSR223使用JavaScript脚本引擎,可给JSON.stringify传入replacer函数,对指定字段强制保留小数位:

// 解析原始响应
const responseJson = JSON.parse(prev.getResponseDataAsString());
// 序列化时自定义处理Quanity字段
const resultJson = JSON.stringify(responseJson, (key, value) => {
    if (key === 'Quanity' && typeof value === 'number') {
        return Number(value.toFixed(3));
    }
    return value;
})

内容的提问来源于stack exchange,提问作者Manasa M.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:06:02