fastjson字符串转对象_fastjson阅读源码总结

f957db7ab11012412408c860bccce180.png

java数据格式使用越来越普遍,在开发过程中经常会用到对象转json格式,阿里的开源项目fastjson是最流行的序列化和反序列化的工具。最近在用fastjson转化日期对象为json格式的时候,发现跟期想的不一样,日期转化之后竟然是时间戳!

Date now=new Date();String jsonDateStr=JSON.toJSONString(now);System.out.println(jsonDateStr);控制台输出 1567432087459 

一般我们会把日期对象转化成json字符串,通过流传到前端页面显示。但是这里转化过去是个时间戳,显然不是我们想要的,到前端页面还是经过转化成易于读取的YYYY-mm-dd hh:mm:ss 格式,仔细想想阿里的大牛不会这一点都没有想到,使用起来这么不方便。怀着好奇得到心态,看了一遍fastjson的源码,心里的疑惑逐渐解开了。同时又发现了好很多好用的方法。

2636a295da88e1d33f70c90aa70466bb.png

fastjson针对每一个类型都有一个对应的处理类,比如长整型Long 有对应的LongCodec处理,普通bean对用JavaBeanSerializer,日期Date对象用DateCodec处理。打开DateCodec可以看到

 if (out.isEnabled(SerializerFeature.WriteDateUseDateFormat)) { DateFormat format = serializer.getDateFormat(); if (format == null) { format = new SimpleDateFormat(JSON.DEFFAULT_DATE_FORMAT, serializer.locale); ((DateFormat)format).setTimeZone(serializer.timeZone); } String text = ((DateFormat)format).format(date); out.writeString(text);
 long time = date.getTime(); out.writeLong(time);

也就是我们如果加上参数SerializerFeature.WriteDateUseDateFormat 那么就会按照标准格式输出,否则会转化成时间戳。

我们把测试的方法改造

Date now=new Date();String jsonDateStr=JSON.toJSONString(now,SerializerFeature.WriteDateUseDateFormat);System.out.println(jsonDateStr);输出"2019-09-02 22:29:14"

如果我们想自定义格式 比如输出 YYYY-MM-dd HH:mm

则可以用 toJSONStringWithDateFormat(Object object, String dateFormat, SerializerFeature... features)

Date now=new Date(); String jsonDateStr=JSON.toJSONStringWithDateFormat(now,"YYYY-MM-dd HH:mm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值