完美解決gson將Integer默認(rèn)轉(zhuǎn)換成Double的問題
首先javascript只有這些個(gè)類型:
1、Number 在JavaScript中的雙精度浮點(diǎn)格式
2、String 雙引號的反斜杠轉(zhuǎn)義的Unicode
3、Boolean true 或 false
4、Array 值的有序序列
5、Value 它可以是一個(gè)字符串,一個(gè)數(shù)字,真的還是假(true/false),空(null )等
6、Object 無序集合鍵值對
7、Whitespace 可以使用任何一對中的令牌
8、null empty
所以可以得出結(jié)論其實(shí)在javascript中20和20.0其實(shí)是相等的,都是number類型,即javascript中沒有整數(shù)類型一說。
因此我們用gson.fromJson(msg, new TypeToken<Map<String, Object>>() {}.getType())將json字符串msg
例如:
{"id":20,"name":"test"}轉(zhuǎn)換成Map<String,Object>時(shí),就會把數(shù)字類型的值都轉(zhuǎn)換成了Double類型(此時(shí)map中key為“id”的值是一個(gè)Double類型,為20.0)
當(dāng)我們再把這個(gè)Map用gson.toJson轉(zhuǎn)換成json字符串時(shí),奇葩的事情就發(fā)生了,不再和我們最開始傳進(jìn)來的json字符串一致了,變成了{(lán)"id":20.0,"name":"test"}
想讓它們一致,可以這樣創(chuàng)建gson對象:
<span style="font-family:arial, 宋體, sans-serif, tahoma, Microsoft YaHei;color:#454545;"> Gson gson = new GsonBuilder().
registerTypeAdapter(Double.class, new JsonSerializer<Double>() {
@Override
public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) {
if (src == src.longValue())
return new JsonPrimitive(src.longValue());
return new JsonPrimitive(src);
}
}).create();</span>
即如果是Double類型的,判斷一下它和它的longValue是否相等,如果相等則說明小數(shù)位是補(bǔ)了一個(gè)".0",那么我們就返回src.longValue,否則直接返回Double src。
以上這篇完美解決gson將Integer默認(rèn)轉(zhuǎn)換成Double的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring學(xué)習(xí)筆記之bean的基礎(chǔ)知識
ean在Spring和SpringMVC中無所不在,將這個(gè)概念內(nèi)化很重要,所以下面這篇文章主要給大家介紹了關(guān)于Spring學(xué)習(xí)筆記之bean基礎(chǔ)的相關(guān)資料,文中通過示例代碼介紹的非常詳解,需要的朋友可以參考下。2017-12-12
RocketMQ源碼分析之Broker過期消息清理機(jī)制
這篇文章主要為大家介紹了RocketMQ源碼分析之Broker過期消息清理機(jī)制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
Spring Boot使用Druid進(jìn)行維度的統(tǒng)計(jì)和監(jiān)控
這篇文章主要介紹了Spring Boot使用Druid進(jìn)行維度的統(tǒng)計(jì)和監(jiān)控,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2017-04-04
Java使用設(shè)計(jì)模式中迭代器模式構(gòu)建項(xiàng)目的代碼結(jié)構(gòu)示例
這篇文章主要介紹了Java使用設(shè)計(jì)模式中迭代器模式構(gòu)建項(xiàng)目的代碼結(jié)構(gòu)示例,迭代器模式能夠?qū)υL問者隱藏對象的內(nèi)部細(xì)節(jié),需要的朋友可以參考下2016-05-05
Java設(shè)置請求響應(yīng)時(shí)間的多種實(shí)現(xiàn)方式
在前后端分離的開發(fā)模式中,前端請求后端獲取數(shù)據(jù)時(shí),合理設(shè)置響應(yīng)時(shí)間(超時(shí)時(shí)間)是提升系統(tǒng)性能和用戶體驗(yàn)的關(guān)鍵,本文將深入探討如何在Java中設(shè)置請求的響應(yīng)時(shí)間,需要的朋友可以參考下2025-01-01

