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

Jackson 2.18.0设置STRIP_TRAILING_BIGDECIMAL_ZEROES=false仍无法保留尾随零?

解决Jackson 2.18.0保留数值尾随零的问题

你的配置没生效,核心原因是你修改的是已初始化的JsonParser关联的ObjectMapper,此时解析流程已经启动,后续配置无法影响当前的解析过程。以下是正确的解决步骤:

正确配置方式

1. 先配置ObjectMapper再解析

不要从已有的JsonParser中获取ObjectMapper,而是先创建并配置好ObjectMapper,再用它来生成JsonParser或直接解析:

// 1. 创建并配置ObjectMapper
ObjectMapper mapper = new ObjectMapper();
// 禁用移除BigDecimal尾随零的特性
mapper.configure(JsonNodeFeature.STRIP_TRAILING_BIGDECIMAL_ZEROES, false);
// 强制将所有浮点数值解析为BigDecimal(避免自动转成Double丢失尾随零)
mapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);

// 2. 用配置好的mapper解析JSON
// 示例1:从字符串解析
String json = "{\"num\": 123.000}";
JsonNode root = mapper.readTree(json);

// 示例2:从输入流/Reader解析(如果必须用JsonParser)
JsonParser jsonParser = mapper.createParser(new FileInputStream("data.json"));
JsonNode rootNode = mapper.readTree(jsonParser);

2. 正确获取数值以保留尾随零

解析后获取节点值时,要使用decimalValue()方法,而不是asDouble()或asInt()——这些方法会自动转换类型,丢失尾随零信息:

BigDecimal numValue = root.get("num").decimalValue();
System.out.println(numValue); // 输出 123.000,保留尾随零

为什么原代码不生效

你原代码中从jsonParser.getCodec()拿到的ObjectMapper,是创建该JsonParser时就已经确定配置的。此时JsonParser已经基于初始配置完成了初始化,后续修改ObjectMapper的配置,无法对正在进行的解析操作生效。必须在创建JsonParser之前完成所有配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:47:06