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的错误。


以上资料为本人个人开发经验总结得来,发表出来与大家相互交流学习!如果有什么问题或者有更好的解决方法,也请大家积极留言,相互讨论!


版权声明:本文为u011012826原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。