【发布时间】:2014-07-24 06:44:41
【问题描述】:
我很难与 GSON 相处。
我有一个简单的 JSON,我想反序列化为 Map<String,Object>。
123 应该被解析为 int(或 long),123.4 应被解析为 float(或 double),这对我来说真的很直观。
另一方面,GSON 一直在创造双打。
我可以告诉 GSON 不要一直滥用 double 吗?
我的实际代码:
Type mapType = new TypeToken<Map<String, Object>>() {}.getType();
GSON gson = new Gson();
Map<String, Object> map = gson.fromJson(someString, mapType);
【问题讨论】:
-
根本问题是只有一个Number类型。 JSON 没有 int 类型 - 它们都是浮点数,尽可能省略小数位。
-
@McDowell 是的,我知道这一点。但是 GSON 的行为使得反序列化和序列化产生与原始输入不同的输出,这真的很讨厌;例如我有一个
timestamp字段,原来是 1234567890,在 deser-ser 循环之后是 1.23456789E9 -
有什么解决办法吗?
-
根本问题是 gson 无法提供将整数转换为整数的选项。 gson 可以检测整数吗?是的,您可以使用 LongSerializationPolicy.STRING 转换为字符串。为什么没有 LongSerializationPolicy,LONG 策略?我知道这并不像看起来那么简单,因为 JSON 没有整数类型(同一字段在一个实例中可能是整数,而在另一个实例中可能是十进制),但这就是策略的用武之地。