Json之FastJson

阿里巴巴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方法。

posted @ 2016-04-04 14:01  煮海焚天  阅读(319)  评论(0编辑  收藏  举报