一、FastJson介绍
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,也可以将 JSON 字符串转换为 Java 对象。
二、pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.colobu</groupId>
<artifactId>fastjson-jaxrs-json-provider</artifactId>
<version>0.3.1</version>
</dependency>
三、将 Java 对象转换为 JSON 格式
1、 定义一个名为 Person 的 JavaBean类
import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
@JSONField(name="USERNAME",ordinal = 1)
private String username;
@JSONField(name="AGE",ordinal = 2)
private int age;
//排除不需要序列化的字段
@JSONField(serialize = false)
private String birthday;
}
2、可以使用 JSON.toJSONString() 将 Java 对象转换换为 JSON 对象:
import com.alibaba.fastjson.JSON;
import org.junit.Test;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
public class TestFastJSON {
//Java对象转JSON
@Test
public void javaBeanToJSON(){
//创建Person对象
Person p = new Person("张三",16, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
//使用JSON对象的 toString方法将对象转换为JOSN数据
String s = JSON.toJSONString(p);
System.out.println(s);
//{"age":16,"birthday":"2024-01-16 21:59:23","username":"张三"}
}
//List集合转Json
@Test
public void ListToJSON(){
//创建Person对象
Person p1 = new Person("张三",15, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
Person p2 = new Person("李四",16, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
Person p3 = new Person("王五",13, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
List<Person> list = new ArrayList<>();
Collections.addAll(list,p1,p2,p3);
//使用JSON对象的 toString方法将对象转换为JOSN数据
String s = JSON.toJSONString(list);
System.out.println(s);
//[{"age":15,"birthday":"2024-01-16 22:00:05","username":"张三"},{"age":16,"birthday":"2024-01-16 22:00:05","username":"李四"},{"age":13,"birthday":"2024-01-16 22:00:05","username":"王五"}]
}
}
3、 Fastjson中的 @JSONField 注解
- 通过 @JSONField 我们可以自定义字段的名称进行输出,并控制字段的排序,还可以进行序列化标记。
- 指定name属性, 字段的名称
- 使用 ordinal属性, 指定字段的顺序
- 使用 serialize属性, 指定字段不序列化
@Data
public class Person {
//自定义输出的名称, 并且进行输出排序
@JSONField(name="USERNAME",ordinal = 1)
private String username;
@JSONField(name="AGE",ordinal = 2)
private int age;
//排除不需要序列化的字段
@JSONField(serialize = false)
private String birthday;
public Person() {
}
public Person(String username, int age, String birthday) {
this.username = username;
this.age = age;
this.birthday = birthday;
}
}
四、JSON 字符串转换为 Java 对象
- JSON.parseObject()
- 可以使用 JSON.parseObject() 将 JSON 字符串转换为 Java 对象。
- 注意反序列化时为对象时,必须要有默认无参的构造函数,否则会报异常
- JSON.parseArray()
- 可以使用 JSON.parseArray() 将 JSON 字符串转换为 集合对象。
import com.alibaba.fastjson.JSON;
import org.junit.Test;
import java.util.List;
public class JSONToJavaBean {
//JSON转Java对象
@Test
public void JSONToJavaBeanTest(){
String json = "{\"age\":12,\"birthday\":\"2024-01-01 10:00:00\",\"username\":\"张三\"}";
Person person = JSON.parseObject(json, Person.class);
System.out.println(person);
System.out.println("===================================");
//创建Person对象
String json2 ="[{\"age\":15,\"birthday\":\"2024-01-16 22:00:05\",\"username\":\"张三\"},{\"age\":16,\"birthday\":\"2024-01-16 22:00:05\",\"username\":\"李四\"},{\"age\":13,\"birthday\":\"2024-01-16 22:00:05\",\"username\":\"王五\"}]";
List<Person> list = JSON.parseArray(json2,Person.class);
System.out.println(list);
}
}