JAVA:将 Json 元素转换为对象时,整数值会转换为 Double

问题描述 投票:0回答:1

我有一个使用对象数据类型的属性定义的类

public class Field {
  private Object value = null;
}

执行以下操作时

Map<String,Object> map Object = new HashMap<String,Object>();
Field field = new Field();
f1.value = 1;
Map<String, Object> fieldMap = new ObjectMapper().convertValue(field, Field.class);
Gson gson = new GsonBuilder();
JsonElement jsonElement = gson.toJsonTree(fieldMap);
Field field = gson.fromJson(jsonElement, Field.class);

如果我们访问 field.value,它会返回 1.0 而不是 1。 我观察到这种转换发生在 GSON 的原始转换之前。 看起来对象数据类型正在将 JSON“1”中的字符串转换为双精度而不是整数。

有什么方法可以覆盖这个默认行为吗?

我尝试使用 Jackson Converter 而不是 GSON,但没有成功。 我期望响应是整数而不是双精度值。

java gson deserialization data-conversion fromjson
1个回答
0
投票

下面将介绍您的代码中使用Gson的部分。一般来说,避免混合使用多个 JSON 库,可以使用 Gson 或 Jackson,但不能同时使用两者(尤其不要使用同一方法)。它只会引起混乱和问题,例如Jackson 注释不被 Gson 识别,反之亦然。


当您将 JSON 数字反序列化为

Object
时,Gson 默认情况下始终将其解析为
Double
,无论数字的格式如何。
Gson 不会尝试猜测数字类型,因为所需的类型是特定于应用程序的。例如,一个应用程序可能希望将
1
解析为
Double
,另一个应用程序解析为
Integer
,另一个应用程序解析为
Long
;这里没有“正确”的选择。

相反,如果可能,您应该将类型

Object
更改为更具体的类型,例如
Integer
。如果这不可能,您有以下替代方案:

© www.soinside.com 2019 - 2024. All rights reserved.