java如何利用FastJSON Gson,杰克逊三种Json格式工具自定义时间序列化

  

Java处理JSON数据有三个比较流行的类库FastJSON, Gson和杰克逊。
  

  杰克逊

<强>
  

  

杰克逊是由其社区进行维护,简单易用并且性能也相对高些。但是对于复杂的bean转换Json,转换的格式鄙视标准的Json格式每分钟:杰克逊为Spring MVC内置Json解析工具
  

  

<强> Gson
  

  

Gson是由谷歌公司研发的产品,目前是最全的Json解析工具。完全可以将复杂的类型的Json解析成豆或者Bean到Json的转换
  

  

<强> FastJson
  

  

Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发.FastJson采用独创的算法,将解析的速度提升到极致,超过所有JSON库。但是在对一些复杂类型的Bean转换JSON上会出现一些问题,需要特殊处理。
  

  

<强> 1。遇到的问题

  

在Java平台通过接口调用。净提供的服务的时候,在Json序列化的时候,经常遇到时间格式的转换的不对的问题。
  net平台内置的Json序列化使用的是System.Runtime。序列化,序列化出来的时间是下面的这种格式
  

        (1296576000000 + 0800)\ \/日期/      

<强> 2。思路

  

为了能够调用。净平台提供的服务,那么在时间格式(日期)序列化的时候,能够序列化成上面的格式。那么就拼时间字符串。
  

        日期现在=新的日期();   字符串nowStr=String.format(“\ \/日期(% s + 0800) \ \/? now.getTime ());      

<强> 3。代码

  

依赖Jar包
  

        编译组:“com.google.code。gson’,名字:“gson”版本:“2.8.1发布的   编译组:“com。阿里巴巴的名字:“fastjson”版本:“1.2.36”   编译组:“com.fasterxml.jackson。核心”,名字:“jackson-databind”版本:“2.9.0”      

自定义时间转化字符串代码
  

        公开课StringSmallUtils {/* *   *时间类型格式转换为指定的字符串类型   *   * @param日期   * @return   */受保护的静态字符串DateToSpecialString(日期日期){   如果(日期==null)   返回null;   返回String.format(“\ \/日期(% s + 0800) \ \/? date.getTime ());   }/* *   *指定的字符串类型转换为时间类型格式   *   * @param str   * @return   */保护静态日期SpecialStringToDate (String str) {   如果(isEmpty (str))   返回null;   如果(!包含(str,“日期”))   返回null;   str=str.replace(“\ \/日期(”、“”).replace (+ 0800) \ \/, " ") .trim ();   返回新日期(Long.parseLong (str));   }/* *   *判断字符串是否包含输入的字符串   *   * @param str   * @param searchStr   * @return   */公共静态逻辑包含(String str,字符串searchStr) {   如果(str==null | | searchStr==null) {   返回错误;   }   返回str.contains (searchStr);   }/* *   *判断字符串是否为空   *   * @param str   * @return   */公共静态布尔isEmpty (String str) {   返回((str==null) | | (str.trim () .isEmpty ()));   }   }      之前      

<强> 3.1 Gson自定义实现日期Json字符串序列化

  

Gson自定义Json序列类只需要实现JsonSerializer接口,以及反序列化接口JsonDeserializer
  

        公共类GsonCustomerDateJsonSerializer实现JsonSerializer{   @Override   公共JsonElement序列化(日期src、类型typeOfSrc JsonSerializationContext上下文){   返回新JsonPrimitive (StringSmallUtils.DateToSpecialString (src));   }      @Override   公开日期反序列化(JsonElement json、类型typeOfT JsonDeserializationContext上下文)抛出JsonParseException {   返回StringSmallUtils.SpecialStringToDate (json.getAsString ());   }   }      之前      

<强>测试
  

  

Gson的自定义的序列化类是通过适配器模式进行注册到Gson上的。
  

        公共类项目{   公共静态void main (String [] args)抛出JsonProcessingException {   日期开始=新的日期();   Gson Gson=new GsonBuilder () .registerTypeAdapter(日期。类,新GsonCustomerDateJsonSerializer())共创();   字符串gsonStr=gson.toJson (createUser ());   日期=new结束日期();   长间隔=(end.getTime ()——start.getTime ());   System.out.println(字符串。格式(“Gson序列化之后的字符串:% s,花费时间% d毫秒”,gsonStr,间隔));   }      私有静态用户createUser () {   用户用户=新用户();   user.setName(“张三”);   user.setAge (21);   用户。setLastlogintime(新日期());   返回用户;   }   }      

java如何利用FastJSON Gson,杰克逊三种Json格式工具自定义时间序列化