使用FastJson导出JSON
概述
fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,比gson快大约6倍。
https://github.com/alibaba/fastjson
FastJson常用方法
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
步骤
- step1. 导入jar包
- step2. 构建POJO
- step3. 将POJO转换为JSON字符串:
JSON.toJSONString( 顶级POJO对象的引用 )
=> 纯字符串,只有一行JSON.toJSONString( 顶级POJO对象的引用, true)
=> 带格式
// 1)将JavaBean序列化为JSON文本
public static final String toJSONString(Object object);
// 2)将JavaBean序列化为带格式的JSON文本
public static final String toJSONString(Object object, boolean prettyFormat);
一个简单的Demo
- User.java
public class User {
private String username;
private String password;
// 构造器、方法略
}
- UserGroup.java
public class UserGroup {
private String name;
private List<User> users;
// 构造器、方法略
}
- TestFastJson.java
public class TestFastJson {
@Test
public void objectToJson() {
// 简单的Java类转Json
User user = new User("ali", "123456");
String userJson = JSON.toJSONString(user);
System.out.println("简单Java类转Json字符串:"+ userJson);
// List<Object>类转Json
User user1 = new User("coco", "123456");
User user2 = new User("ly", "789");
List<User> users = new ArrayList<User>();
users.add(user1);
users.add(user2);
String listJson = JSON.toJSONString(users);
System.out.println("List<Object>转Json字符串" + listJson);
// 复杂的Java类转Json字符串
UserGroup userGroup = new UserGroup("userGroup", users);
String userGroupJson = JSON.toJSONString(userGroup);
System.out.println("复杂的Java类转Json字符串:" + userGroupJson);
}
}
- 控制台输出结果:
简单Java类转Json字符串:{"password":"123456","username":"ali"}
List<Object>转Json字符串:[{"password":"123456","username":"coco"},{"password":"789","username":"ly"}]
复杂的Java类转Json字符串:{"name":"userGroup","users":[{"password":"123456","username":"coco"},{"password":"789","username":"ly"}]}
Demo2
- User.java
public class User {
private int id;
private String name;
private Computer computer;
// 构造器、方法略
}
- Computer.java
public class Computer {
private String brand;
private String CPUdegree;
// 构造器、方法略
}
- TestObject.java
package josn.mydemo;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
public class TestObject {
@Test
public void test() {
Computer computer = new Computer("Thinkpad", "intel core i7");
User user = new User(1, "大白", computer);
String userJson = JSON.toJSONString(user);
System.out.println(userJson);
}
}
- 结果:
![](https://img2020.cnblogs.com/blog/1555060/202008/1555060-20200811101613049-865409139.png)
笔记
- 定义POJO时,由里到外,先定义最里面的对象
- 在fastjson中,缺省是不输出空值的。无论Map中的null和对象属性中的null,序列化的时候都会被忽略不输出,这样会减少产生文本的大小。 => 来自官方文档
![](https://img2020.cnblogs.com/blog/1555060/202008/1555060-20200811101410569-2022536967.png)