JSP解析JSONObject类型对象出现null object异常解决方案

本文介绍了解决JSON数据交互中出现的nullobject异常问题的方法,包括使用JSONValue异常处理及反序列化为MAP对象的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


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

报错信息Content-Length: 476 Connection: keep-alive Content-Type: application/json; charset=utf-8 Date: Tue, 11 Mar 2025 07:11:15 GMT Server: Microsoft-HTTPAPI/2.0 Strict-Transport-Securi"..."c\u56e0\u4e3a\u89c6\u56fe DimAttributeProjTable \u7684\u8868 ProjTable \u4e2d\u4e0d\u5b58\u5728\u8bb0\u5f55\u3002","Level":"Error"}] Server-Timing: total;dur=567.0874 Content-Security-Policy: frame- 2025-03-11 15:11:15,640 ERROR A2 - [null] WeaverHttp&HS2249&15:11:08&/workflow/request/RequestOperation.jsp-295158[weaverHAN.action.D365PersonalExpenseAccountP.D365PersonalExpenseAccountP:146] - weaverHAN.action.D365PersonalExpenseAccountP.D365PersonalExpenseAccountP net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of rror when reading response headers: small read buffer. Increase ReadBufferSize. Buffer size=4096, contents: "HTTP/1.1 200 OK Content-Length: 476 Connection: keep-alive Content-Type: application/json; charset=utf-8 Date: Tue, 11 Mar 2025 07:11:15 GMT Server: Microsoft-HTTPAPI/2.0 Strict-Transport-Securi"..."c\u56e0\u4e3a\u89c6\u56fe DimAttributeProjTable \u7684\u8868 ProjTable \u4e2d\u4e0d\u5b58\u5728\u8bb0\u5f55\u3002","Level":"Error"}] Server-Timing: total;dur=567.0874 Content-Security-Policy: frame- at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:512) at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:901) at net.sf.json.JSONObject._fromString(JSONObject.java:1122) at net.sf.json.JSONObject.fromObject(JSONObject.java:174) at net.sf.json.JSONObject.fromObject(JSONObject.java:148) at
03-12
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值