問題場景
在我需要將一個(gè)對象轉(zhuǎn)為Map類型時(shí)瞧捌,調(diào)用Gson.fromJson
發(fā)現(xiàn)棵里,原來對象中的Long類型的主鍵等字段,被解析成了科學(xué)計(jì)數(shù)法姐呐,導(dǎo)致后續(xù)的解析出錯(cuò)殿怜。
解決方案
一、繼續(xù)使用GSON
將gson對Long數(shù)據(jù)序列化的方式修改為字符串
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
三、其他問題
當(dāng)gson / JSON對 時(shí)間類型DATE進(jìn)行反序列化時(shí)鸠澈,需要自己重寫反序列化邏輯