使用 JSON-Simple (Java) 在 JSON 数据中解析十进制数字,其中一些缺少小数分隔符
Posted
技术标签:
【中文标题】使用 JSON-Simple (Java) 在 JSON 数据中解析十进制数字,其中一些缺少小数分隔符【英文标题】:Parsing decimal numbers, some of which lack a decimal separator, in JSON data using JSON-Simple (Java) 【发布时间】:2019-11-20 22:43:04 【问题描述】:我正在尝试使用JSON-Simple JSON 处理器库。
解析JSON片段时如:
"speed":1.13
…我打电话给get
并转换为Double
。没问题。
Double speed = ( Double ) wind.get( "speed" );
然后我遇到一个没有小数的值。例如:1
而不是 1.0
。
"speed":1
当然,此数据的发布者应该写为"speed":1.0
。但他们没有。
我的 get
带有强制转换抛出异常:
线程“主”java.lang.ClassCastException 中的异常:类 java.lang.Long 无法转换为类 java.lang.Double(java.lang.Long 和 java.lang.Double 在模块 java.base 中)加载程序“引导程序”)
显然JSON-Simple 坚持将1
的JSON 值解析为Long
。所以我需要一种解决方法,一种告诉 JSON-Simple 如何解析这个特定元素的方法。
➥ 有没有办法告诉 JSON-Simple 将字符串输入解析为 Double
而不管是否存在 decimal separator(小数点)?
➥ 更好的是,我可以告诉 JSON-Simple 将特定 JSON 元素的字符串输入解析为 BigDecimal
以绕过 floating-point 的 inaccuracy 吗? (也就是说,从String
到BigDecimal
,一路上不涉及浮点数)
【问题讨论】:
【参考方案1】:而不是强制转换尝试
Double.parseDouble(wind.get( "speed" ).toString())
【讨论】:
【参考方案2】:使用更高版本
您使用的是方毅东领导的原始 JSON-Simple 库。后来的版本 2 和 3 是在 GitHub 上的 this Clifton Labs page 上作为分支开发的,由 Davin Loegering 领导。
原版不支持BigDecimal
。 The fork 确实支持 BigDecimal
。请参阅getBigDecimal
方法。
fork 对原始库进行了相当大的更改。请参阅that Clifton Labs page 的历史部分。
【讨论】:
以上是关于使用 JSON-Simple (Java) 在 JSON 数据中解析十进制数字,其中一些缺少小数分隔符的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot War 中缺少 json-simple.jar
将json-simple添加到类路径后仍然无法解析简单符号[重复]