使用 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 吗? (也就是说,从 String
到 BigDecimal
过程中不涉及浮点数)
使用更高版本
您使用的是原版的JSON-方一东主导的简单库。后来的版本 2 和 3 由 Davin Loegering 领导,在 GitHub 的 this Clifton Labs page 上作为一个分支开发。
原文不支持BigDecimal
。 The fork does supports BigDecimal
. See the getBigDecimal
方法。
分叉对原始库进行了相当大的更改。请参阅 that Clifton Labs page 的 历史记录 部分。
而不是铸造尝试
Double.parseDouble(wind.get( "speed" ).toString())
我正在尝试使用 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 吗? (也就是说,从 String
到 BigDecimal
过程中不涉及浮点数)
使用更高版本
您使用的是原版的JSON-方一东主导的简单库。后来的版本 2 和 3 由 Davin Loegering 领导,在 GitHub 的 this Clifton Labs page 上作为一个分支开发。
原文不支持BigDecimal
。 The fork does supports BigDecimal
. See the getBigDecimal
方法。
分叉对原始库进行了相当大的更改。请参阅 that Clifton Labs page 的 历史记录 部分。
而不是铸造尝试
Double.parseDouble(wind.get( "speed" ).toString())