Java中HashMap與String字符串互轉(zhuǎn)的問(wèn)題解決
背景:
當(dāng)我們有需求將HashMap轉(zhuǎn)為Json格式的String時(shí),切記不要使用HashMap的toString()方法,需要使用FastJson/Gson將HashMap轉(zhuǎn)為String。如果使用toString()方法進(jìn)行轉(zhuǎn)換時(shí),是無(wú)法將字符串再轉(zhuǎn)為HashMap的。它只會(huì)出現(xiàn)序列化報(bào)錯(cuò):
demo代碼:
HashMap<String, String> dataMap = new HashMap<>(4); dataMap.put("key1", "value1"); dataMap.put("key2", "value2"); dataMap.put("key3", "value3"); dataMap.put("key4", "value4"); String byToString = dataMap.toString(); String byJSONString = JSON.toJSONString(dataMap); System.out.println(byToString); System.out.println(byJSONString); HashMap<String ,String> hashMap = JSON.parseObject(byJSONString, HashMap.class); HashMap<String ,String> hashMap2 = JSON.parseObject(byToString, HashMap.class);
log:
{key1=value1, key2=value2, key3=value3, key4=value4} {"key1":"value1","key2":"value2","key3":"value3","key4":"value4"}
再往下執(zhí)行,通過(guò)Debug可見(jiàn):
通過(guò)FastJson轉(zhuǎn)換成String的方式可以再將String轉(zhuǎn)為HashMap,但是通過(guò)toString轉(zhuǎn)換會(huì)報(bào)錯(cuò)序列化問(wèn)題。
原因:
HashMap toString源碼:
HashMap重寫(xiě)了基類的toString方法,原理是通過(guò)for循環(huán)的方式將key與value之間用=連接后輸出,顯然這樣并不是一個(gè)Json串的格式。
JSON.toJSONString(Object object)源碼:
FastJson通過(guò)toJSONString方法可以將Object對(duì)象轉(zhuǎn)為Json格式的字符串,反之,可以通過(guò)序列化/反序列化的方式將Json字符串轉(zhuǎn)化為原對(duì)象。
到此這篇關(guān)于Java中HashMap與String字符串互轉(zhuǎn)的問(wèn)題解決的文章就介紹到這了,更多相關(guān)HashMap與String字符串互轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android開(kāi)發(fā)簡(jiǎn)單計(jì)算器實(shí)現(xiàn)代碼
這篇文章主要介紹了Android開(kāi)發(fā)簡(jiǎn)單計(jì)算器實(shí)現(xiàn),本文放置了完整的Android開(kāi)發(fā)電腦,通過(guò)部署項(xiàng)目可以直接按到效果,希望本篇文章可以對(duì)你有所幫助2021-06-06Java利用Socket實(shí)現(xiàn)網(wǎng)絡(luò)通信功能
在早期的網(wǎng)絡(luò)編程中,Socket是很常見(jiàn)的實(shí)現(xiàn)技術(shù)之一,比如早期的聊天室,就是基于這種技術(shù)進(jìn)行實(shí)現(xiàn)的,另外現(xiàn)在有些消息推送,也可以基于Socket實(shí)現(xiàn),本文小編給大家介紹了Java利用Socket實(shí)現(xiàn)網(wǎng)絡(luò)通信功能的示例,需要的朋友可以參考下2023-11-11詳解使用Java原生代理實(shí)現(xiàn)AOP實(shí)例
本篇文章主要介紹了詳解使用Java原生代理實(shí)現(xiàn)AOP實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01java格式化數(shù)字操作 NumberFormat及DecimalFormat
這篇文章主要介紹了java格式化數(shù)字操作 NumberFormat及DecimalFormat,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10淺析Java中關(guān)鍵詞volatile底層的實(shí)現(xiàn)原理
在 Java 并發(fā)編程中,有 3 個(gè)最常用的關(guān)鍵字:synchronized、ReentrantLock 和 volatile,這篇文章主要來(lái)和大家聊聊volatile底層的實(shí)現(xiàn)原理,感興趣的可以了解下2024-02-02Java 線程池_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
系統(tǒng)啟動(dòng)一個(gè)新線程的成本是比較高的,因?yàn)樗婕暗脚c操作系統(tǒng)的交互。在這種情況下,使用線程池可以很好的提供性能,尤其是當(dāng)程序中需要?jiǎng)?chuàng)建大量生存期很短暫的線程時(shí),更應(yīng)該考慮使用線程池2017-05-05SpringBoot+Spring?Data?JPA整合H2數(shù)據(jù)庫(kù)的示例代碼
H2數(shù)據(jù)庫(kù)是一個(gè)開(kāi)源的關(guān)系型數(shù)據(jù)庫(kù),本文重點(diǎn)給大家介紹SpringBoot+Spring?Data?JPA整合H2數(shù)據(jù)庫(kù)的示例代碼,感興趣的朋友跟隨小編一起看看吧2022-02-02