fastjson和json-lib的区别

上次把原生json替换成了fastjson,发生不少地方不兼容,对这个也作了一些总结:json

 

一、对于没有赋值的变量处理,json-lib会根据类型给出相应初始值,而fastjson直接忽略这个字段。
解决方式:转换时传入两个参数:SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty
加入WriteMapNullValue后,这个字段将不会被忽略,可是值是null,
加入WriteNullStringAsEmpty,将null改为空字符串。
针对数字、布尔类型,还有WriteNullNumberAsZero、WriteNullBooleanAsFalse等。
 
二、对于斜杠的处理,json-lib会将“/”转义成“\/”,而fastjson保持原样。
解决方式:若是要让fastjson对于斜杠进行转义,在转换时传入参数:SerializerFeature.WriteSlashAsSpecial。
 
三、fastjson的引用,当List里有多个元素的某些属性值相同,后面元素的属性会引用第一个元素的属性,里面的值会写成相似$ref:$.members[0].reportTo的形式,这样能够减小数据量,可是有时候引用没法被识别。
解决方式:转换时传入SerializerFeature.DisableCircularReferenceDetect参数,关闭引用,结果和json-lib的方式相同。
 
四、对于getter方法的识别。tYbdm这样的字段,用MyEclipse自动生成的get方法是gettYbdm,json-lib可以识别,但fastjson不行。
解决方式:严格的驼峰命名方式,好比getTYbdm
或者在属性上面加上@JSONField注解