什么是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包下载地址:https://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.83/fastjson-1.2.83.jar
低版本fastjson可能存在漏洞,建议使用fastjson较新版本>1.2.48
安装
Idea 中导入fastjson包的方法。ctrl+alt+shift+S 打开项目结构,依次点击Libraries->+加号。
将刚才下载的jar文件导入我们的项目
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
常用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> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final <T> List<T> parseArray(String text, Class<T> 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。
java类转换为json字符串
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;
/**
*Java对象转json字符串
*/
public class StringToJSON {
public static void main(String[] args) {
//定义JSON字符串
Employee e = new Employee("易学教程","male", 22);
System.out.println(JSON.toJSONString(e));
Employee e2 = new Employee("易学教程2","male", 23);
Employee e3 = new Employee("易学教程3","male", 25);
List<Employee> list = new ArrayList<>();
list.add(e);
list.add(e2);
list.add(e3);
System.out.println(JSON.toJSONString(list));
}
//JavaBean.java
public static class Employee{
private String name;
private String sex;
private Integer age;
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
public Employee(String name, String sex, Integer age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
}
解析Json字符串反序列化为Java对象import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import java.util.List;
/**
*解析Json字符串反序列化为Java对象
*/
public class StringToJSON {
public static void main(String[] args) {
//定义JSON字符串
String jsonStr = "{\"age\":22,\"name\":\"易学教程\",\"sex\":\"male\"}";
Employee e = (Employee) JSON.parseObject(jsonStr, Employee.class);//简单java类解析
System.out.println("json字符串转简单java对象:"+e.toString());
//解析带有list的json字符串
String jsonStr2 = "[{\"age\":22,\"name\":\"易学教程\",\"sex\":\"male\"},{\"age\":23,\"name\":\"易学教程2\",\"sex\":\"male\"},{\"age\":25,\"name\":\"易学教程3\",\"sex\":\"male\"}]";
List<Employee> list =
JSONObject.parseObject(jsonStr2, new TypeReference<List<Employee>>(){});
System.out.println(list);
}
//JavaBean.java
public static class Employee{
private String name;
private String sex;
private Integer age;
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
public Employee() {
}
public Employee(String name, String sex, Integer age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
}