首頁 > 軟體

解決從Map、JSONObject取不存在鍵值對時的異常情況

2022-07-06 14:05:35

從Map、JSONObject取不存在鍵值對時異常

1.在Map中取不存在的鍵值對時不會報異常

只會返回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);
    }
//列印結果是:null。

結論:從map中取出不存在的鍵值對時不會報異常,會返回null。

2.在JSONObject中取不存在的鍵值對時分兩種情況

利用jSONObject.get(Object key)方法及get(String key)取不存在的鍵值對時不會報異常,會返回null;但是利用jSONObject.getxxx(String key)方法取時會報空指標異常:

@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)方法取出不存在的鍵值對時不會報異常,會返回null
        Object y = jSONObject.get("dd");
        System.out.println(y);
        // 從jSONObject中用getxxx(String key)方法取出不存在的鍵值對時報異常
        String y2 = jSONObject.getString("dd");
        System.out.println(y2);
    }

對null處理時會報空指標異常:

@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());
    }
//列印結果:
//null
//null
//null

分析可知:不管null是何種型別,Object null或者String null或者其他型別的null,呼叫getClass()方法時都會報空指標異常。

如果是Object null,則可以轉為其他型別的null,因為其他型別都是Object的子類。

但是其他型別的null不能隨便轉型別,除非是有父子關係的型別。

例如,如果String型別的想轉為User型別的,就會有編譯錯誤,說Cannot cast from String to User。

遍歷JSONObject獲取鍵值對

看程式碼時遇到的,遍歷JSONObject,獲取鍵值對

Map<String, String> map = new HashMap<>();
JSONObject jsonObject = new JSONObject(jsonStr);//字串轉換成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);
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com