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格式工具自定义时间序列化