JSONObject?toJSONString錯誤的解決
JSONObject toJSONString錯誤
1.com.alibaba.fastjson.JSONObject 繼承了JSON
可以使用其2個重要的方法:
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字符串時,但有固定的key,則可通過JSONObject jsonObject = JSONObject.parseObject(jsonStr);
然后通過 jsonObject.getString("key");等基本方法獲取key對于的value.
2.在使用時需要注意的地方
并非所有的對象,都能通過JSONObject.toJSONString(model) 轉(zhuǎn)換成功。
例如:在接入阿里語音驗證碼時,對SingleCallByTtsRequest請求對象使用以上方法時,就會轉(zhuǎn)換報錯。
SingleCallByTtsRequest extends RpcAcsRequest<SingleCallByTtsResponse>? RpcAcsRequest<T extends AcsResponse> extends AcsRequest<T>? SingleCallByTtsResponse extends AcsResponse
他們的繼承關(guān)系如上,這里并未對錯誤原因進(jìn)行深入分析,猜測是因為其中有相互引用導(dǎo)致解析轉(zhuǎn)換失敗。
3.默認(rèn)過濾掉值為null的key
public static String toJSONString(Object object)
該方法將實體對象轉(zhuǎn)換成Json字符串時默認(rèn)忽略值為null的屬性。
public static String toJSONString(Object object, SerializerFeature… features)
該方法將實體對象轉(zhuǎn)換成Json字符串時,如果不傳遞參數(shù)SerializerFeature.WriteMapNullValue,則忽略值為null的屬性。
JSONUtils.toJSONString的一個坑
JSONUtils.toJSONString(null); //返回一個為"null"的字符串
這樣會導(dǎo)致一個結(jié)果就是StringUtils.isBlank判斷后,會為false
因為高德返回的這個數(shù)據(jù)結(jié)構(gòu)是個key-value結(jié)構(gòu),除了null,就是一個帶有”{}“的一個字符串。
不需要判斷使用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;
? ? ? ? }以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- 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<實體類>轉(zhuǎn)換
- 解決String字符串轉(zhuǎn)JSONObject順序不對的問題
相關(guān)文章
Jenkins節(jié)點配置實現(xiàn)原理及過程解析
這篇文章主要介紹了Jenkins節(jié)點配置實現(xiàn)原理及過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09
springboot項目數(shù)據(jù)庫密碼如何加密
在我們?nèi)粘i_發(fā)中,我們可能很隨意把數(shù)據(jù)庫密碼直接明文暴露在配置文件中,今天就來聊聊在springboot項目中如何對數(shù)據(jù)庫密碼進(jìn)行加密,感興趣的可以了解一下2021-07-07
SpringbootJPA分頁 PageRequest過時的替代方法
這篇文章主要介紹了SpringbootJPA分頁 PageRequest過時的替代方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Eureka源碼閱讀Client啟動入口注冊續(xù)約及定時任務(wù)
這篇文章主要為大家介紹了Eureka源碼閱讀Client啟動入口注冊續(xù)約及定時任務(wù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Java中HashSet、LinkedHashSet和TreeSet區(qū)別詳解
這篇文章主要介紹了Java中HashSet、LinkedHashSet和TreeSet區(qū)別詳解,如果你需要一個訪問快速的Set,你應(yīng)該使用HashSet,當(dāng)你需要一個排序的Set,你應(yīng)該使用TreeSet,當(dāng)你需要記錄下插入時的順序時,你應(yīng)該使用LinedHashSet,需要的朋友可以參考下2023-09-09
詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找)
本篇文章主要介紹了詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09
Springboot結(jié)合Flowable實現(xiàn)工作流開發(fā)
本文主要介紹了Springboot結(jié)合Flowable實現(xiàn)工作流開發(fā),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01

