我想用GSON解析JSON文档。但是,我对数字有疑问。
我的模式只是简单地遍历所有令牌……这是先窥视然后基于切换语句中的TokenType做一些事情。以下代码段中的reader
是JsonReader
。
while (reader.hasNext() && !endReached) {
final var nextToken = reader.peek();
switch (nextToken) {
case NUMBER:
// reader.nextInt(), reader.nextLong(), reader.nextDouble()
break;
...
}
}
我怎么知道它是Integer / Long还是十进制值,也许只适合BigDecimal?只是调用nextString(),然后尝试使用BigDecimal解析字符串,依此类推?
答案 0 :(得分:1)
在JSON中,数字始终是以下形式的浮点数:
['-'] digits [ '.' digits ] [ 'e' sign digits ]
所以基本上是double
,除了NaN
和±Infinity
。
对于通用代码,请使用nextDouble()
,除非您期望非常大的数字,否则需要使用BigDecimal
。
nextInt()
和nextLong()
方法是您知道数字应该为整数值的辅助方法。