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 教程里有示例。