阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:
速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson;
功能强大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省;无依赖,能够直接运行在Java SE 5.0以上版本;
Fastjson究竟有多快?
序列化时间 | 反序列化时间 | 大小 | 压缩后大小 | |
java序列化 | 8654 | 43787 | 889 | 541 |
hessian | 6725 | 10460 | 501 | 313 |
protobuf | 2964 | 1745 | 239 | 149 |
thrift | 3177 | 1949 | 349 | 197 |
avro | 3520 | 1948 | 221 | 133 |
json-lib | 45788 | 149741 | 485 | 263 |
jackson | 3052 | 4161 | 503 | 271 |
fastjson | 2595 | 1472 | 468 | 251 |
Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
public static final T parseObject(String text, Class clazz); // 把JSON文本parse为JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final List parseArray(String text, Class clazz); //把JSON文本parse成JavaBean集合
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。
FastJson小弟主要就是使用map封装,javaBean封装,解析的时候使用javaBean。
首先说map封装,一个map就是一个类,一个list就是一个集合数组。直接附上源码
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("success", true);
map.put("resultCode", "200");
map.put("resultMessage", "操作成功");
// map集合
List<Map> list = new ArrayList<Map>();
HashMap<String, Object> mapA = new HashMap<String, Object>();
mapA.put("code", 8);
mapA.put("desc", "4115");
mapA.put("hash", "");
mapA.put("key", "");
HashMap<String, Object> mapB = new HashMap<String, Object>();
mapB.put("code", 8);
mapB.put("desc", "4115");
mapB.put("hash", "");
mapB.put("key", "");
list.add(mapA);
list.add(mapB);
map.put("items", list);
String jsonString = JSON.toJSONString(map);
输入的json如下
{ "resultCode": "200", "resultMessage": "操作成功", "success": true, "items": [{ "desc": "4115", "hash": "", "code": 8, "key": "" }, { "desc": "4115", "hash": "", "code": 8, "key": "" }] }
下面说javaBean的序列化和反序列化,实体类需要实现Serializable接口。
BaseJsonObject.java只有三个基本属性,需要实现Serializable接口。
private boolean success;
private Integer resultCode;
private String resultMessage;
LoginResult.java继承BaseJsonObject类。需要返回用户信息,充值信息,服务器信息
private UserItem userInfo;
private ServerItemList serverInfo;
private ChargeItem chargeInfo;
UserItem.java类内都是一些用户的基本属性
private Integer userID;
private String userName;
private String mac;
private String token;
private String port;
ServerItemList.java
private List<ServerItem> serverList;
ServerItem.java
private Integer sid;
private String ip;
private String name;
private Integer nodeType;
private String description;
ChargeItem.java
private Integer cid;
private String alipayId;
private Integer chargeStatus;
private String chargeTime;
private String expireDate;
private Double chargeMoney;
private MenuItem menuInfo;
MenuItem.java
private Integer menuId;
private String menuName;
private Double menuMoney;
private Integer menuDays;
private String menuRemark;
至此,javaBean就封装完毕,get,set方法省略。
接着就是给javaBean赋值,最后调用fastJson的toJSONString即可得到JSON字符串
{ "resultCode": 200, "resultMessage": "获取个人信息成功", "success": true, "result": { "userInfo": { "cryption": "aes-256-cfb", "mac": "MyNameIsMac", "port": "1+THwxIwo/g=", "userID": 1, "userName": "user" }, "chargeInfo": { "chargeMoney": 24, "cid": 15, "expireDate": "2016-05-20", "menuInfo": { "menuDays": 30, "menuId": 1, "menuMoney": 5, "menuName": "包月" } }, "serverInfo": { "serverList": [{ "description": "美国高速1", "ip": "127.0.0.1", "name": "第一个节点" }, { "description": "香港高速-1", "ip": "127.0.0.1", "name": "HK高速" }] } } }
反序列化封装好javaBean后,调用fastJson的 parseObject方法。