使用 JSON-Simple (Java) 解析 JSON 数据中的小数,其中一些缺少小数分隔符

Parsing decimal numbers, some of which lack a decimal separator, in JSON data using JSON-Simple (Java)

我正在尝试使用 JSON-Simple JSON 处理器库。

解析 JSON 片段时,例如:

"speed":1.13

…我调用 get 并投射为 Double。没问题。

Double speed = ( Double ) wind.get( "speed" );

但是后来我遇到了一个没有小数的值。例如:1 而不是 1.0

"speed":1

当然,这个数据的发布者应该写"speed":1.0。但他们没有。

我的 get 转换抛出异常:

Exception in thread "main" java.lang.ClassCastException: class java.lang.Long cannot be cast to class java.lang.Double (java.lang.Long and java.lang.Double are in module java.base of loader 'bootstrap')

显然 JSON-Simple 坚持将 1 的 JSON 值解析为 Long。所以我需要一个解决方法,一种告诉 JSON-Simple 如何解析这个特定元素的方法。

➥ 有没有办法告诉 JSON-Simple 将字符串输入解析为 Double 而不管 decimal separator(小数点)是否存在?

➥ 更好的是,我可以告诉 JSON-Simple 将特定 JSON 元素的字符串输入解析为 BigDecimal to bypass the inaccuracy of floating-point 吗? (也就是说,从 StringBigDecimal 过程中不涉及浮点数)

使用更高版本

您使用的是原版的JSON-方一东主导的简单库。后来的版本 2 和 3 由 Davin Loegering 领导,在 GitHub 的 this Clifton Labs page 上作为一个分支开发。

原文不支持BigDecimalThe fork does supports BigDecimal. See the getBigDecimal 方法。

分叉对原始库进行了相当大的更改。请参阅 that Clifton Labs page 历史记录 部分。

而不是铸造尝试

Double.parseDouble(wind.get( "speed" ).toString())