在使用Java處理JSON時(shí),我們常常會(huì)遇到各種各樣的報(bào)錯(cuò)信息。其中,比較常見(jiàn)的錯(cuò)誤包括:
NullPointerException IllegalArgumentException ClassCastException JSONException
下面,我們逐一介紹這些錯(cuò)誤的原因及解決方法。
NullPointerException
當(dāng)我們?cè)噲D訪(fǎng)問(wèn)一個(gè)空對(duì)象的屬性或方法時(shí),就會(huì)發(fā)生NullPointerException。
JSONObject json = null; String value = json.getString("key"); // 報(bào)錯(cuò)!json為空對(duì)象
解決方法:在使用前,先判斷對(duì)象是否為空。
JSONObject json = null; if (json != null) { String value = json.getString("key"); }
IllegalArgumentException
當(dāng)我們傳遞錯(cuò)誤的參數(shù)給一個(gè)方法時(shí),就會(huì)發(fā)生IllegalArgumentException。
JSONObject json = new JSONObject(); json.put(null, "value"); // 報(bào)錯(cuò)!key不能為null
解決方法:檢查參數(shù)是否合法。
JSONObject json = new JSONObject(); if (key != null) { json.put(key, "value"); }
ClassCastException
當(dāng)我們?cè)噲D將一個(gè)對(duì)象轉(zhuǎn)換成錯(cuò)誤的類(lèi)型時(shí),就會(huì)發(fā)生ClassCastException。
JSONObject json = new JSONObject(); json.put("key", "value"); JSONArray array = (JSONArray) json.get("key"); // 報(bào)錯(cuò)!json中key對(duì)應(yīng)的是String類(lèi)型
解決方法:在轉(zhuǎn)換前,檢查對(duì)象的類(lèi)型。
JSONObject json = new JSONObject(); json.put("key", "value"); Object value = json.get("key"); if (value instanceof JSONArray) { JSONArray array = (JSONArray) value; }
JSONException
當(dāng)我們對(duì)一個(gè)不合法的JSON串進(jìn)行解析時(shí),就會(huì)發(fā)生JSONException。
String jsonString = "not a valid json string"; JSONObject json = new JSONObject(jsonString); // 報(bào)錯(cuò)!jsonString不是一個(gè)合法的JSON串
解決方法:確保JSON串是合法的。
String jsonString = "{\"key\":\"value\"}"; try { JSONObject json = new JSONObject(jsonString); } catch (JSONException e) { e.printStackTrace(); }