一、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@Testpublic 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@Testpublic 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对象@Testpublic 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);}
}