解決從Map、JSONObject取不存在鍵值對(duì)時(shí)的異常情況
從Map、JSONObject取不存在鍵值對(duì)時(shí)異常
1.在Map中取不存在的鍵值對(duì)時(shí)不會(huì)報(bào)異常
只會(huì)返回null
@Test
?? ?public void testMap() {
?? ??? ?Map<String, Object> map = new HashMap<String, Object>();
?? ??? ?map.put("d", 10);
?? ??? ?Object b = map.get("c");
?? ??? ?System.out.println(b);
?? ?}
//打印結(jié)果是:null。結(jié)論:從map中取出不存在的鍵值對(duì)時(shí)不會(huì)報(bào)異常,會(huì)返回null。
2.在JSONObject中取不存在的鍵值對(duì)時(shí)分兩種情況
利用jSONObject.get(Object key)方法及get(String key)取不存在的鍵值對(duì)時(shí)不會(huì)報(bào)異常,會(huì)返回null;但是利用jSONObject.getxxx(String key)方法取時(shí)會(huì)報(bào)空指針異常:
@Test
?? ?public void testJSONObject() {
?? ??? ?Map<String, Object> map = new HashMap<String, Object>();
?? ??? ?map.put("d", 10);
?? ??? ?JSONObject jSONObject = JSONObject.fromObject(map);
?? ??? ?int xx = jSONObject.getInt("d");
?? ??? ?System.out.println(xx);
?? ??? ?// 從jSONObject中用get(Object key)方法取出不存在的鍵值對(duì)時(shí)不會(huì)報(bào)異常,會(huì)返回null
?? ??? ?Object y = jSONObject.get("dd");
?? ??? ?System.out.println(y);
?? ??? ?// 從jSONObject中用getxxx(String key)方法取出不存在的鍵值對(duì)時(shí)報(bào)異常
?? ??? ?String y2 = jSONObject.getString("dd");
?? ??? ?System.out.println(y2);
?? ?}對(duì)null處理時(shí)會(huì)報(bào)空指針異常:
@Test
?? ?public void testNull() {
?? ??? ?Object o = null;
?? ??? ?System.out.println(o);
?? ??? ?String s = (String) o;
?? ??? ?System.out.println(s);
?? ??? ?// System.out.println(s.getClass());
?? ??? ?User u = (User) o;
?? ??? ?System.out.println(u);
?? ??? ?// System.out.println(u.getClass());
?? ?}
//打印結(jié)果:
//null
//null
//null分析可知:不管null是何種類型,Object null或者String null或者其他類型的null,調(diào)用getClass()方法時(shí)都會(huì)報(bào)空指針異常。
如果是Object null,則可以轉(zhuǎn)為其他類型的null,因?yàn)槠渌愋投际荗bject的子類。
但是其他類型的null不能隨便轉(zhuǎn)類型,除非是有父子關(guān)系的類型。
例如,如果String類型的想轉(zhuǎn)為User類型的,就會(huì)有編譯錯(cuò)誤,說Cannot cast from String to User。
遍歷JSONObject獲取鍵值對(duì)
看代碼時(shí)遇到的,遍歷JSONObject,獲取鍵值對(duì)
Map<String, String> map = new HashMap<>();
JSONObject jsonObject = new JSONObject(jsonStr);//字符串轉(zhuǎn)換成JSONObject
//jsonStr,例如:"{\"key\":\"value\",\"key1\":\"value1\"}"
Iterator<String> keys = jsonObject.keys();
while(keys.hasNext) {
?? ?String key = keys.next();//獲取key
?? ?String value = jsonObject.getString(key);//獲取value
?? ?map.put(key, value);
}以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA項(xiàng)目maven?project沒有出現(xiàn)plugins和Dependencies問題
這篇文章主要介紹了IDEA項(xiàng)目maven?project沒有出現(xiàn)plugins和Dependencies問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
Java基礎(chǔ)之spring5新功能學(xué)習(xí)
這篇文章主要介紹了Java基礎(chǔ)之spring5新功能學(xué)習(xí),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05
springmvc前臺(tái)向后臺(tái)傳值幾種方式總結(jié)(從簡(jiǎn)單到復(fù)雜)
今天小編就為大家分享一篇springmvc前臺(tái)向后臺(tái)傳值幾種方式總結(jié)(從簡(jiǎn)單到復(fù)雜),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Java DriverManager.getConnection()獲取數(shù)據(jù)庫連接
這篇文章主要介紹了Java DriverManager.getConnection()獲取數(shù)據(jù)庫連接,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
利用5分鐘快速搭建一個(gè)springboot項(xiàng)目的全過程
Spring Boot的監(jiān)控能夠使開發(fā)者更好地掌控應(yīng)用程序的運(yùn)行狀態(tài),下面這篇文章主要給大家介紹了關(guān)于如何利用5分鐘快速搭建一個(gè)springboot項(xiàng)目的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05
springboot tomcat的maxHttpFormPostSize參數(shù)示例解析
這篇文章主要介紹了springboot tomcat的maxHttpFormPostSize參數(shù)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
java遞歸實(shí)現(xiàn)復(fù)制一個(gè)文件夾下所有文件功能
這篇文章主要介紹了java遞歸實(shí)現(xiàn)復(fù)制一個(gè)文件夾下所有文件功能n次,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
SpringBoot?Admin集成診斷利器Arthas示例實(shí)現(xiàn)
這篇文章主要為大家介紹了SpringBoot?Admin集成診斷利器Arthas示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06

