com.alibaba.fastjson.JSON
package com.alibaba.fastjson; public abstract class JSON { public static final String toJSONString(Object object); public static final <T> T parseObject(String text, Class<T> clazz, Feature... features); }
使用
序列化
String jsonString = JSON.toJSONString(obj);
反序列化
VO vo = JSON.parseObject("...", VO.class);
泛型反序列化
import com.alibaba.fastjson.TypeReference; List<VO> list = JSON.parseObject("...", new TypeReference<List<VO>>() {});
fastjson如何处理日期
fastjson处理日期的API很简单,例如:
JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss.SSS")
使用ISO-8601日期格式
JSON.toJSONString(obj, SerializerFeature.UseISO8601DateFormat);
全局修改日期格式
JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd"; JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
反序列化能够自动识别如下日期格式:
-
ISO-8601日期格式
-
yyyy-MM-dd
-
yyyy-MM-dd HH:mm:ss
-
yyyy-MM-dd HH:mm:ss.SSS
-
毫秒数字
-
毫秒数字字符串
-
.NET JSON日期格式
-
new Date(198293238)
如何定制序列化
可以使用SimplePrePropertyFilter过滤字段。
fastjson支持多种方式定制序列化
-
通过@JSONField定制序列化
-
通过@JSONType定制序列化
-
通过SerializeFilter定制序列化
-
通过ParseProcess定制反序列化
通过@JSONField定制序列化
可以把@JSONField配置在字段或者getter/setter方法上.
public class VO { @JSONField(name="ID") private int id; @JSONField(name="birthday",format="yyyy-MM-dd") public Date date; }
使用@JSONType配置
和JSONField类似,但JSONType配置在类上,而不是field或者getter/setter方法上。
通过SerializeFilter定制序列化
通过SerializeFilter可以使用扩展编程的方式实现定制序列化。fastjson提供了多种SerializeFilter:
-
PropertyPreFilter 根据PropertyName判断是否序列化
-
PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化
-
NameFilter 修改Key,如果需要修改Key,process返回值则可
-
ValueFilter 修改Value
-
BeforeFilter 序列化时在最前添加内容
-
AfterFilter 序列化时在最后添加内容
以上的SerializeFilter在JSON.toJSONString中可以使用。
SerializeFilter filter = ...; // 可以是上面5个SerializeFilter的任意一种。 JSON.toJSONString(obj, filter);
当对象存在引用时,序列化后的结果浏览器不支持
使用SerializerFeature.DisableCircularReferenceDetect特性关闭引用检测和生成。例如:
String jsonString = JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);
将对象中的空值输出
缺省情况下fastjson不输出对象的空值的,如果你需要输出空值.
Model obj = ...; JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue);
空值特别处理
SerializerFeature | 描述 |
---|---|
WriteNullListAsEmpty | 将Collection类型字段的字段空值输出为[] |
WriteNullStringAsEmpty | 将字符串类型字段的空值输出为空字符串 "" |
WriteNullNumberAsZero | 将数值类型字段的空值输出为0 |
WriteNullBooleanAsFalse | 将Boolean类型字段的空值输出为false |
返回较大整数javascript丢失精度问题
当返回的整数大于9007199254740991或者小于-9007199254740991时,在javascript中会丢失精度。此时使用SerializerFeature.BrowserCompatible能自动将数值变成字符串返回,解决精度问题。
来源:https://github.com/alibaba/fastjson/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
性能
fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,fastjson比gson快大约6倍。