Java的快速JSON解析器/生成器–Fastjson使用
最近在項目開發中遇到一個情景:將JavaBean轉爲json字符串發送,接收到json字符串後在解析爲Javabean。網上搜索有很多實現方法。其中最多的就是使用阿里巴巴的fastjson庫。後來才發現項目架構中已經引入了fastjson,只不過平時只是簡單生成json對象傳到前臺。
一、官方介紹
首先我們看看官方是如何介紹Fastjson:
什麼是fastjson?
fastjson是阿里巴巴的開源JSON解析庫,它可以解析JSON格式的字符串,支持將Java Bean序列化爲JSON字符串,也可以從JSON字符串反序列化到JavaBean。
fastjson的優點
- 速度快
fastjson相對其他JSON庫的特點是快,從2011年fastjson發佈1.1.x版本之後,其性能從未被其他Java實現的JSON庫超越。 - 使用廣泛
fastjson在阿里巴巴大規模使用,在數萬臺服務器上部署,fastjson在業界被廣泛接受。在2012年被開源中國評選爲最受歡迎的國產開源軟件之一。 - 測試完備
fastjson有非常多的testcase,在1.2.11版本中,testcase超過3321個。每次發佈都會進行迴歸測試,保證質量穩定。 - 使用簡單
fastjson的API十分簡潔。
String text = JSON.toJSONString(obj); //序列化
VO vo = JSON.parseObject("{...}", VO.class); //反序列化
- 功能完備
支持泛型,支持流處理超大文本,支持枚舉,支持序列化和反序列化擴展。
二、Fastjson使用
GitHub項目地址:https://github.com/alibaba/fastjson
W3Cschool 教程地址:https://www.w3cschool.cn/fastjson/fastjson-quickstart.html
下載使用
在maven中央倉庫中直接下載
http://repo1.maven.org/maven2/com/alibaba/fastjson/
或者配置maven依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
將Java對象序列化爲JSON字符串
package com.lyf.test;
import java.io.Serializable;
/**
* 系統用戶
*
* @author LYF
*/
public class SysUser implements Serializable {
private static final long serialVersionUID = 1L;
private String userid;//用戶名
private String pwd;//密碼
private String name;//姓名
private String gender;//性別
private String email;//郵箱
private String phone;//手機
private String address;//詳細地址
public SysUser(){
}
public SysUser(String userid, String pwd, String name, String gender, String email, String phone, String address) {
super();
this.userid = userid;
this.pwd = pwd;
this.name = name;
this.gender = gender;
this.email = email;
this.phone = phone;
this.address = address;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
測試:
package com.lyf.test;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
public class FastJsonTest {
public static void main(String[] args) {
SysUser sysUser = new SysUser("admin","admin","張凡","男","sdfasd.163.com","15200000000","北京海淀區");
String sysUserStr = JSON.toJSONString(sysUser);
System.out.println("對象轉JSON串:"+sysUserStr);
SysUser sysUser1 = JSONObject.parseObject(sysUserStr, sysUser.getClass());
System.out.println("JSON串轉對象:"+sysUser1);
}
}
結果:
對象轉JSON串:{"address":"北京海淀區","email":"sdfasd.163.com","gender":"男","name":"張凡","phone":"15200000000","pwd":"admin","userid":"admin"}
JSON串轉對象:北京海淀區
總結
像對象數組,對象集合,對象的集合屬性都可以序列化爲JSON字符串,在W3Cschool 教程裏有示例。