JSON作为一个轻量级的文本数据交换格式常常用于web后台的数据封装和传输。JSON及其工具包给开发带来非常多的好处,提高了开发效率。然而,世间总是免不了存在一些坑,吾辈需笑看人生路,潜心研码。NULL值作为一个特殊情况,在处理的时候尤其需要小心处理。不幸的是,随着我们使用的工具类的作者的不同,对NULL的处理也有不同。此处,就扒一扒如题两家JSONObject工具类对NULL的处理。
问题来了,这两家对NULL是如何处理的,示例代码如下:
运行的测试结果如下:
结果很明显,net.sf.json.JSONObject
将null转换成了一个字符串"null"
,com.alibaba.fastjson
则是将null转换为了null
,两者是有不同的。
首先,net.sf.json.JSONObject
提供了一个将其他类型的数据转换为转换为JSONObject
的方法fromObject()
|
|
从其源代码可以看出net.sf.json
功能强大,接口简洁,然而主要看的并不是这里,而是它的_fromJSONString((JSONString)object, jsonConfig);
方法。
nextValue
方法是JSONTokener
类的方法,代码如下:
|
|
至此可以看到net.sf.json
将NULL转换为一个“null” 字符串处理。如果直接对存在null值得JSON对象使用getString
进行操作,那么就容易出现使用getString("anull") == null
的操作,而fastjson
则是将null直接转换为一个null
对象,所以可以直接使用getString("anull") == null
进行比较。
万幸的是,如果我们通过JSON的方法将JSON对象转换为封装相同字段的JAVA
对象,无论是哪种JSON
工具包,最后都会把NULL转换为null
。
所以建议后台获取的JSON对象,如果想要使用,最好先转换为JAVABean来避免不同工具包之间的差异所带来的异常故障。