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
相关产品推荐
相关产品推荐

