FASTJSON初探(一)

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倍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值