安卓常用第三方框架-FastJson
阿新 • • 發佈:2019-01-28
簡介
上次我們講到Google的Gson庫,作為國際大公司的阿里巴巴也不敢示弱,出了一款號稱速度最快的Fastjson,這裡有第三方給出的測試結果https://github.com/eishay/jvm-serializers/wiki, 雖然FastJson在Github上戲稱Gson的“G”是“龜速”的意思,但FastJson在文件方面確實做得不如Gson(沒辦法天朝軟體行業的通病)。廢話不多說下面先給地址。
下載地址
Gradle依賴
Fastjson提供了兩種版本:標準版本,Android版本,所以新增Gradle依賴也有所不同
關於兩個版本的區別可以檢視阿里巴巴寫的文件
# 標準版
compile 'com.alibaba:fastjson:1.2.24'
# android版
compile 'com.alibaba:fastjson:1.1.56.android'
FastJson使用
與Gson的fromJson,toJson類似FastJson也有如下方法
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);
}
所以序列化的時候也是直接將物件作為toJsonString的引數
序列化
String jsonString = JSON.toJSONString(obj);
反序列化
Type obj = JSON.parseObject("...", Type.class);
泛型序列化
import com.alibaba.fastjson.TypeReference;
List<Type> list = JSON.parseObject("..." , new TypeReference<List<Type>>() {});
定製序列化的key
使用@JSONField註解能夠定製JSON字串生成的key,不僅如此還可以設定其中的serialize/deserialize來定製該欄位是否序列化/反序列化
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER })
public @interface JSONField {
int ordinal() default 0;//配置序列化的順序,1.1.42版本之後才支援
String name() default "";//配置序列化的key
String format() default "";//配置Date日期格式
boolean serialize() default true;//能否序列化
boolean deserialize() default true;//能否反序列化
SerializerFeature[] serialzeFeatures() default {};//設定序列化配置SerializerFeature是列舉類
Feature[] parseFeatures() default {};//設定反序列化配置Feature是列舉類
}
可以說@JSONField 的一個註解融合了Gson的@Expose和@SerializedName兩個註解的功能,
示例
JavaBean
public class Group {
private int id;
private String name;
private List<UsersBean> users;
// 省略getter/setter
public static class UsersBean {
private int id;
private String name;
// 省略getter/setter
}
}
//序列化
Group group = new Group();
group.setId(0L);
group.setName("admin");
User guestUser = new User();
guestUser.setId(2L);
guestUser.setName("guest");
User rootUser = new User();
rootUser.setId(3L);
rootUser.setName("root");
group.addUser(guestUser);
group.addUser(rootUser);
String jsonString = JSON.toJSONString(group);
System.out.println(jsonString);
//輸出結果
//{"id":0,"name":"admin","users":[{"id":2,"name":"guest"},{"id":3,"name":"root"}]}
//反序列化
Group group2 = JSON.parseObject(jsonString, Group.class);
// ==>group2與group值相同