1. 程式人生 > >JSP解析JSONObject型別物件出現null object異常解決方案

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的錯誤。

以上資料為本人個人開發經驗總結得來,發表出來與大家相互交流學習!如果有什麼問題或者有更好的解決方法,也請大家積極留言,相互討論!