JSONObject?toJSONString錯(cuò)誤的解決
JSONObject toJSONString錯(cuò)誤
1.com.alibaba.fastjson.JSONObject 繼承了JSON
可以使用其2個(gè)重要的方法:
Model model = new Model(); String json = JSONObject.toJSONString(model); // serializes model to Json Model model2 = JSONObject.parseObject(json, Model.class); // deserializes json into model2
即可以將json字符串轉(zhuǎn)為json對象,如果該json對象的內(nèi)容是可預(yù)期的對象類型,那么可以通過Model model2 = JSONObject.parseObject(json, Model.class); 取得預(yù)期的對象;
如果是不可預(yù)期的json字符串時(shí),但有固定的key,則可通過JSONObject jsonObject = JSONObject.parseObject(jsonStr);
然后通過 jsonObject.getString("key");等基本方法獲取key對于的value.
2.在使用時(shí)需要注意的地方
并非所有的對象,都能通過JSONObject.toJSONString(model) 轉(zhuǎn)換成功。
例如:在接入阿里語音驗(yàn)證碼時(shí),對SingleCallByTtsRequest請求對象使用以上方法時(shí),就會(huì)轉(zhuǎn)換報(bào)錯(cuò)。
SingleCallByTtsRequest extends RpcAcsRequest<SingleCallByTtsResponse>? RpcAcsRequest<T extends AcsResponse> extends AcsRequest<T>? SingleCallByTtsResponse extends AcsResponse
他們的繼承關(guān)系如上,這里并未對錯(cuò)誤原因進(jìn)行深入分析,猜測是因?yàn)槠渲杏邢嗷ヒ脤?dǎo)致解析轉(zhuǎn)換失敗。
3.默認(rèn)過濾掉值為null的key
public static String toJSONString(Object object)
該方法將實(shí)體對象轉(zhuǎn)換成Json字符串時(shí)默認(rèn)忽略值為null的屬性。
public static String toJSONString(Object object, SerializerFeature… features)
該方法將實(shí)體對象轉(zhuǎn)換成Json字符串時(shí),如果不傳遞參數(shù)SerializerFeature.WriteMapNullValue,則忽略值為null的屬性。
JSONUtils.toJSONString的一個(gè)坑
JSONUtils.toJSONString(null); //返回一個(gè)為"null"的字符串
這樣會(huì)導(dǎo)致一個(gè)結(jié)果就是StringUtils.isBlank判斷后,會(huì)為false
因?yàn)楦叩路祷氐倪@個(gè)數(shù)據(jù)結(jié)構(gòu)是個(gè)key-value結(jié)構(gòu),除了null,就是一個(gè)帶有”{}“的一個(gè)字符串。
不需要判斷使用StringUtils.isBlank進(jìn)行判斷
public class JSONUtils { ? ? public static String toJSONString(Object o) { ? ? ? ? JSONWriter writer = new JSONWriter(); ? ? ? ? writer.writeObject(o); ? ? ? ? return writer.toString(); ? ? } ? ?? ? ? public static Object parse(String text) { ? ? ? ? JSONParser parser = new JSONParser(text); ? ? ? ? return parser.parse(); ? ? } } ? ? public void writeNull() { ? ? ? ? write("null"); ? ? } ? ?? ? ? @SuppressWarnings({ "unchecked", "rawtypes" }) ? ? public void writeObject(Object o) { ? ? ? ? if (o == null) { ? ? ? ? ? ? writeNull(); ? ? ? ? ? ? return; ? ? ? ? }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- String轉(zhuǎn)JSONObject的兩種方式
- Java中如何將String轉(zhuǎn)JSONObject
- 關(guān)于JSONObject.toJSONString出現(xiàn)地址引用問題
- 利用JSONObject.toJSONString()包含或排除指定的屬性
- 使用JSONObject.toJSONString 過濾掉值為空的key
- 解決JSONObject.toJSONString()輸出null的問題
- Java使用fastjson對String、JSONObject、JSONArray相互轉(zhuǎn)換
- 詳解Java中String JSONObject JSONArray List<實(shí)體類>轉(zhuǎn)換
- 解決String字符串轉(zhuǎn)JSONObject順序不對的問題
相關(guān)文章
Java零基礎(chǔ)教程之Windows下安裝、啟動(dòng)Tomcat服務(wù)器方法圖解(免安裝版)
這篇文章主要介紹了Windows系統(tǒng)下安裝、啟動(dòng)、注冊服務(wù)、停止 Tomcat操作的所有方法,本文通過圖文并茂的方式給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2016-09-09springIOC的使用流程及spring中使用類型轉(zhuǎn)換器的方式
Spring IOC是Spring框架的核心原理之一,它是一種軟件設(shè)計(jì)模式,用于管理應(yīng)用程序中的對象依賴關(guān)系,這篇文章主要介紹了springIOC的使用流程以及spring中如何使用類型轉(zhuǎn)換器,需要的朋友可以參考下2023-06-06淺談Java的Synchronized鎖原理和優(yōu)化
這篇文章主要介紹了Java的Synchronized鎖原理和優(yōu)化,synchronized的作用是保證在同一時(shí)刻, 被修飾的代碼塊或方法只會(huì)有一個(gè)線程執(zhí)行,以達(dá)到保證并發(fā)安全的效果,需要的朋友可以參考下2023-05-05如何基于LoadingCache實(shí)現(xiàn)Java本地緩存
這篇文章主要介紹了如何基于LoadingCache實(shí)現(xiàn)Java本地緩存,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12springboot部署linux訪問服務(wù)器資源的方法
這篇文章主要介紹了springboot部署linux訪問服務(wù)器資源,部署springboot項(xiàng)目至服務(wù)器用了幾種不同方法,文中給大家詳細(xì)介紹,需要的朋友可以參考下2019-12-12Springboot如何實(shí)現(xiàn)對配置文件中的明文密碼加密
這篇文章主要介紹了Springboot如何實(shí)現(xiàn)對配置文件中的明文密碼加密問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12基于java語言實(shí)現(xiàn)快遞系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于java語言實(shí)現(xiàn)快遞系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03