一、fastjson介绍
在前后端数据传输交互中,经常会遇到字符串(string)与json,xml等格式相互转换与解析,其中json以跨语言,跨前后端的优点在开发中被频繁使用,基本上可以说是标准的数据交换格式。fastjson 是一个java语言编写的高性能且功能完善的json库,它采用一种“假定有序快速匹配”的算法,把json parse 的性能提升到了极致。它的接口简单易用,已经被广泛使用在缓存序列化,协议交互,web输出等各种应用场景中。
fastjson是啊里巴巴的的开源库,用于对json格式的数据进行解析和打包。
特点如下:
- 能够支持将java bean序列化成json字符串,也能够将json字符串反序列化成java bean。
- 顾名思义,fastjson操作 json的速度是非常快的。
- 无其他包的依赖。
- 使用比较方便。
二、fastjson使用
maven依赖:
com.alibaba
fastjson
版本根据自己需要
三、fastjson常用api
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。
四、示例
public class user {
private string username;
private string password;
public user() {
}
public user(string username, string password) {
this.username = username;
this.password = password;
}
public string getusername() {
return username;
}
public void setusername(string username) {
this.username = username;
}
public string getpassword() {
return password;
}
public void setpassword(string password) {
this.password = password;
}
@override
public string tostring() {
return "user{"
"username='" username '\''
", password='" password '\''
'}';
}
}
public class usergroup {
private string name;
private list users = new arraylist();
public usergroup() {
}
public usergroup(string name, list users) {
this.name = name;
this.users = users;
}
public string getname() {
return name;
}
public void setname(string name) {
this.name = name;
}
public list getusers() {
return users;
}
public void setusers(list users) {
this.users = users;
}
@override
public string tostring() {
return "usergroup{"
"name='" name '\''
", users=" users
'}';
}
}
1. java类转换为json字符串:
/**
* java对象转换为json字符串
*/
@test
public void objtojson() {
//简单对象转换
user user = new user("root", "123456");
//调用tojsonstring()
string userjson = json.tojsonstring(user);
system.out.println("java类转换为json串:" userjson);
//集合转json串
user user1 = new user("zhangsan", "123456");
user user2 = new user("lisi", "000");
list users = new arraylist();
users.add(user1);
users.add(user2);
//调用tojsonstring()
string usersjson = json.tojsonstring(users);
system.out.println("集合转json串:" usersjson);
//复杂java类转换对象
usergroup usergroup = new usergroup("usergroup", users);
//调用tojsonstring()
string usergroupjson = json.tojsonstring(usergroup);
system.out.println("复杂java类转换json串:" usergroupjson);
}
java类转换为json串:{"password":"123456","username":"root"}
集合转json串:[{"password":"123456","username":"zhangsan"},{"password":"000","username":"lisi"}]
复杂java类转换json串:{"name":"usergroup","users":[{"password":"123456","username":"zhangsan"},{"password":"000","username":"lisi"}]}
2. json字符串转为java类:
/**
* json字符串转为java类
* 注:字符串中使用双引号需要转义 (" --> \"),这里使用的是单引号,易读性会好很多。
* json串以“{}”包裹,转换为java类时,使用:parseobject();
* json串以“[]”包裹,转换为java类时,使用:parsearray();
*/
@test
public void jsontoobj(){
/* json字符串转简单java对象
* 字符串:{"password":"123456","username":"dmego"}
*/
string jsonstr1 = "{'password':'123456','username':'ggf'}";
// 调用parseobject()
user user = json.parseobject(jsonstr1, user.class);
system.out.println("json字符串转简单java对象:" user.tostring());
/*
* json字符串转list