GSON转换成Map时,Long型变为科学计数法
2023-11-13 本文已影响0人
JavaM
问题场景
在我需要将一个对象转为Map类型时,调用Gson.fromJson
发现,原来对象中的Long类型的主键等字段,被解析成了科学计数法,导致后续的解析出错。
解决方案
一、继续使用GSON
将gson对Long数据序列化的方式修改为字符串
public static void main(String[] args) {
Gson compareGson = new Gson();
Gson testGson = new GsonBuilder()
.setLongSerializationPolicy(LongSerializationPolicy.STRING) // 将DEFAULT改为STRING
.serializeNulls().create();
Map<String, Object> map = new HashMap<>();
map.put("id", 171211111112112221L);
String compareGsonString = compareGson.toJson(map);
String testGsonString = testGson.toJson(map);
System.out.println("compareGsonString = " + compareGsonString);
System.out.println("testGsonString = " + testGsonString);
Map<String, Object> compareMap = compareGson.fromJson(compareGsonString, new TypeToken<Map<String, Object>>() {
}.getType());
Map<String, Object> testMap = testGson.fromJson(testGsonString, new TypeToken<Map<String, Object>>() {
}.getType());
System.out.println("compareMap = " + compareMap);
System.out.println("testMap = " + testMap);
}
打印:
compareGsonString = {"id":171211111112112221}
testGsonString = {"id":"171211111112112221"}
compareMap = {id=1.71211111112112224E17}
testMap = {id=171211111112112221}
二、使用其他序列化工具
JSONObject
三、其他问题
当gson / JSON对 时间类型DATE进行反序列化时,需要自己重写反序列化逻辑