JSP解析JSONObject型別物件出現null object異常解決方案
在通過json進行系統間資料互動開發的過程中,遇到了一個問題:頁面解析JSONObject的時候,會出現null object的異常,丟擲該異常的原因是,系統間互動的json字串中出現了“:null”,這是這個原因的罪魁禍首。根據這個問題,在網上找了些資料,大多數的解決辦法都是將“:null”替換為空字串,如下:
網上普遍答案:
-------------------------------------------------------------------------------------------------
String result = CommonUtil.send(path+url, method,o);
result = result.replaceAll(":null", ":\"\"");
-------------------------------------------------------------------------------------------------
使用這個方法欠缺考慮的是,當出現“:null”的時候,無論原先資料為什麼型別,都將會被替換為空字串(String型別),這樣在進行具體的業務邏輯處理的時候,需要加大量的特殊判斷以及型別轉換,以應對不同型別變化,因此不建議使用該方法。
在這裡本人給出兩個針對該問題的解決方法:
一:通過org.json.simple提供的JSONValue異常處理解決,如下:
try { /*當接受到的json引數中出現“:null”的情況時,在進行字串轉換為JSONObject物件之後, 頁面上對該JSONObject進行解析時會出現null object的問題, 如下:str為接受到的json字串,將str轉換為JSONObject物件,並將該JSONObject物件直接通過mvc傳送到jsp頁面, 這樣jsp頁面會出現null object異常錯誤*/ String str="{'sendguid':null,'receiveguid':'2121', 'obj_id':'sdsd', 'endpoint':'fgg', 'lineIDs':'fgfgh'}"; JSONObject jsonResult = JSONObject.fromObject(str); /*加入這個異常處理之後,null object異常得到解決*/ //JSONValue.parseWithException(jsonResult.toString()); } catch (Exception e) { // TODO: handle exception }
該方法的優點為,避免了將“:null”轉換成為空字串型別。
二:通過反序列化對JSON字串進行解析為MAP物件之後進行處理,如下:(import flexjson.JSONDeserializer;)
String str="{'sendguid':null,'receiveguid':'2121', 'obj_id':'sdsd', 'endpoint':'fgg', 'lineIDs':'fgfgh'}";
Map<String, String> paramMap = (Map<String, String>) new JSONDeserializer<Map<String, String>>()
.deserialize(str);
String p_sender=paramMap.get("sendguid");
String p_guid=paramMap.get("receiveguid");
String p_funcname=paramMap.get("funcname");
String p_obj_id=paramMap.get("obj_id");
String p_endpoint=paramMap.get("endpoint");
String p_lineIDs=paramMap.get("lineIDs");
logger.info("p_sender:"+p_sender);
logger.info("p_guid:"+p_guid);
logger.info("p_funcname:"+p_funcname);
logger.info("p_obj_id:"+p_obj_id);
logger.info("p_endpoint:"+p_endpoint);
logger.info("p_lineIDs:"+p_lineIDs);
將json字串直接轉換為MAP物件,避免出現頁面直接解析JSONObject時出現的null object的錯誤。
以上資料為本人個人開發經驗總結得來,發表出來與大家相互交流學習!如果有什麼問題或者有更好的解決方法,也請大家積極留言,相互討論!