java中使⽤JSON⼯具处理数字null空
⽬录
前⾔
作者常⽤的有两个:
1. json-lib
maven引⼊⽅式:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
2. fastjson
maven引⼊⽅式:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
</dependency>
这两个⼯具包都可以进⾏json相关的转换等处理;当然也还有其他两个⼤家熟知的⼯具包 Gson和jackson,这两个其实现在都⽐json-lib 好;Gson完全可以将复杂的对象进⾏正确的转换,从功能上来说个⼈感觉是最好的,⽽jackson其实在转换复杂对象的也同样会存在⼀些问题。
1. 缺点:
json-lib:
①. 处理速度慢
②. 如果⼀个类⾥⾯会出现另⼀个类的list或者map集合,json-lib从json到bean的转换就会出现问题
③. 依赖于很多第三⽅包:commons-lang-2.6,commons-beanutils,commons-collections-3.2,commons-logging-
1.1.1,ezmorph-1.0.6
fastjson:
①. 复杂类型的Bean转换Json上会出现⼀些问题,可能会出现引⽤的类型,导致Json转换出错,需要制定引⽤
②. ⽇期的处理有bug
2. 优点:
json-lib:
对于⽬前互联⽹应⽤来说,其实个⼈感觉没啥优点了。
fastjson:
①.采⽤独创的算法,速度快(其实也正因为这个,内部处理不完善,才会出现⽇期等转换的缺陷)
②. ⽆依赖,可直接在JDK运⾏
3.差异区别:
对象转为json的时候:
net.sf.json ⼯具包使⽤ JSONObject.fromObject(obj) 。
fastjson ⼯具包使⽤ JSONObject.parseObject(str)。
json转对象的时候:
net.sf.json ⼯具包使⽤ Bean(obj) 与 Bean(obj, class) 。
fastjson ⼯具包使⽤ JavaObject(json, class) 与 JSONObject.parseObject(str, class) 。
object tofastjson还可以使⽤ toJSONString将对象转换为String字符串
4. 处理对象中的空null:
net.sf.json⼯具包会将字符串类型转换为JSONNull格式的null,将数字类型转换为0 与 0.0。
fastjson ⼯具包会从结果中直接排除为空null的对象属性
5. 分别解决对象中的空null:
net.sf.json⼯具包:
可以定义⼀个静态常量,JSONConfig,作为fromObject⽅法的第⼆个⼊参(主要针对数字):
//定义
public static final JsonConfig jsonConfig = new JsonConfig();
static {
@Override
public Object getDefaultValue(Class type) {
return null;
}
});
}
//使⽤
JSONObject.fromObject(obj, jsonConfig)
注意:此处可⾃定义要将空null处理成什么,如果null则返回的不是null,⽽是JSONNull,如果要判断是否为空需要使⽤
ObjectUtils.isnull()⽅法判断或者使⽤getString得到"null"字符串进⾏判断。
fastjson ⼯具包:
在转成json字符串的时候,增加⼊参,SerializerFeature.WriteMapNullValue,这样转换后,的结果中就不会排除为空null的对象的属性,
JSON.JSONString(obj, SerializerFeature.WriteMapNullValue), class)
此包不存在net.sf.json包的JSONNull的问题。但是对⽇期的处理有部分缺陷;不过对于⽇常普通使⽤是不会有影响的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论