JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。它易于阅读和编写,同时也易于机器解析和生成。
在JSON中,数据结构通过键值对的形式表示。键必须是字符串,值可以是字符串、数字、布尔值、null、数组或另一个JSON对象。
使用fastjson2进行相互转换
添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.23</version>
</dependency>
<!-- 或 -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.23</version>
</dependency>
创建一个实体类
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private Integer id;
private String name;
private Integer age;
private String email;
private Date birthday;
}
Java对象转换为JSON
public class JsonTest {
@Test
public void testObjectToJson() {
// 创建Java对象
Student student = Student.builder().id(1).name("张三").age(20).email("zs@sina.com").birthday(new Date()).build();
System.out.println(student);
// Student(id=1, name=张三, age=20, email=zs@sina.com, birthday=Thu Dec 21 09:42:27 CST 2023)
// 将Java对象转换为JSON格式
String jsonString = JSON.toJSONString(student);
System.out.println(jsonString);
// {"age":20,"birthday":"2023-12-21 09:42:27.769","email":"zs@sina.com","id":1,"name":"张三"}
}
}
JSON 转换为Java对象
public class JsonTest {
@Test
public void testJsonToObject() {
String jsonString = "{\"age\":20,\"birthday\":\"2023-12-21 09:42:27.769\",\"email\":\"zs@sina.com\",\"id\":1,\"name\":\"张三\"}";
// 将JSON格式的对象转换为Java对象
Student student = JSON.parseObject(jsonString, Student.class);
System.out.println(student);
// Student(id=1, name=张三, age=20, email=zs@sina.com, birthday=Thu Dec 21 09:42:27 CST 2023)
}
}
List集合转JSON字符串
public class JsonTest {
@Test
public void testListToJson() {
ArrayList<Student> students = new ArrayList<>();
Student student1 = Student.builder().id(1).name("张三").age(20).email("zs@sina.com").birthday(new Date()).build();
Student student2 = Student.builder().id(2).name("李四").age(20).email("ls@sina.com").birthday(new Date()).build();
Student student3 = Student.builder().id(3).name("王五").age(20).email("ww@sina.com").birthday(new Date()).build();
students.add(student1);
students.add(student2);
students.add(student3);
System.out.println(students);
String jsonString = JSON.toJSONString(students);
System.out.println(jsonString);
/**
* [
* Student(id=1, name=张三, age=20, email=zs@sina.com, birthday=Thu Dec 21 09:49:14 CST 2023),
* Student(id=2, name=李四, age=20, email=ls@sina.com, birthday=Thu Dec 21 09:49:14 CST 2023),
* Student(id=3, name=王五, age=20, email=ww@sina.com, birthday=Thu Dec 21 09:49:14 CST 2023)
* ]
* [
* {"age":20,"birthday":"2023-12-21 09:49:14.213","email":"zs@sina.com","id":1,"name":"张三"},
* {"age":20,"birthday":"2023-12-21 09:49:14.213","email":"ls@sina.com","id":2,"name":"李四"},
* {"age":20,"birthday":"2023-12-21 09:49:14.213","email":"ww@sina.com","id":3,"name":"王五"}
* ]
*/
}
}
JSON字符串转List集合
public class JsonTest {
@Test
public void testJsonToList() {
String jsonString = "" +
" [" +
" {\"age\":20,\"birthday\":\"2023-12-21 09:49:14.213\",\"email\":\"zs@sina.com\",\"id\":1,\"name\":\"张三\"}," +
" {\"age\":20,\"birthday\":\"2023-12-21 09:49:14.213\",\"email\":\"ls@sina.com\",\"id\":2,\"name\":\"李四\"}," +
" {\"age\":20,\"birthday\":\"2023-12-21 09:49:14.213\",\"email\":\"ww@sina.com\",\"id\":3,\"name\":\"王五\"}" +
" ]";
// JSON类的静态方法 parseArray
// 传递JSON字符串;转换后的集合的泛型和class对象
List<Student> studentList = JSON.parseArray(jsonString, Student.class);
for (Student student : studentList) {
System.out.println(student);
}
/**
* Student(id=1, name=张三, age=20, email=zs@sina.com, birthday=Thu Dec 21 09:49:14 CST 2023)
* Student(id=2, name=李四, age=20, email=ls@sina.com, birthday=Thu Dec 21 09:49:14 CST 2023)
* Student(id=3, name=王五, age=20, email=ww@sina.com, birthday=Thu Dec 21 09:49:14 CST 2023)
*/
}
}
Map集合转JSON字符串
public class JsonTest {
@Test
public void testMapToJson() {
HashMap<String, Student> objectObjectHashMap = new HashMap<>();
Student student1 = Student.builder().id(1).name("张三").age(20).email("zs@sina.com").birthday(new Date()).build();
Student student2 = Student.builder().id(2).name("李四").age(20).email("ls@sina.com").birthday(new Date()).build();
Student student3 = Student.builder().id(3).name("王五").age(20).email("ww@sina.com").birthday(new Date()).build();
objectObjectHashMap.put("student1", student1);
objectObjectHashMap.put("student2", student2);
objectObjectHashMap.put("student3", student3);
System.out.println(objectObjectHashMap);
System.out.println(JSON.toJSONString(objectObjectHashMap));
/**
* {
* "student2":{"age":20,"birthday":"2023-12-21 09:56:01.972","email":"ls@sina.com","id":2,"name":"李四"},
* "student1":{"age":20,"birthday":"2023-12-21 09:56:01.972","email":"zs@sina.com","id":1,"name":"张三"},
* "student3":{"age":20,"birthday":"2023-12-21 09:56:01.972","email":"ww@sina.com","id":3,"name":"王五"}
* }
*/
}
}
JSON字符串转Map集合
public class JsonTest {
@Test
public void testJsonToMap() {
String jsonString = "" +
"{" +
" \"student2\":{\"age\":20,\"birthday\":\"2023-12-21 09:56:51.195\",\"email\":\"ls@sina.com\",\"id\":2,\"name\":\"李四\"}," +
" \"student1\":{\"age\":20,\"birthday\":\"2023-12-21 09:56:51.195\",\"email\":\"zs@sina.com\",\"id\":1,\"name\":\"张三\"}," +
" \"student3\":{\"age\":20,\"birthday\":\"2023-12-21 09:56:51.195\",\"email\":\"ww@sina.com\",\"id\":3,\"name\":\"王五\"}" +
"}";
// JSON类的静态方法 parseObject
// 直接进行反序列化,Map集合没有泛型的,泛型没有是不安全的集合
// 转后的集合,必须有泛型
// 调用parseObject,传递参数,TypeReference类型,在TypeReference类的泛型中,传递转后的Map集合
Map<String, Student> studentMap = JSON.parseObject(jsonString, new TypeReference<Map<String, Student>>() {
});
for (String key : studentMap.keySet()) {
System.out.println(key + " ———— " + studentMap.get(key));
}
/**
* student2 ———— Student(id=2, name=李四, age=20, email=ls@sina.com, birthday=Thu Dec 21 09:56:51 CST 2023)
* student1 ———— Student(id=1, name=张三, age=20, email=zs@sina.com, birthday=Thu Dec 21 09:56:51 CST 2023)
* student3 ———— Student(id=3, name=王五, age=20, email=ww@sina.com, birthday=Thu Dec 21 09:56:51 CST 2023)
*/
}
}
@JSONField
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Student {
@JSONField(ordinal = 0)
private Integer id;
@JSONField(name = "名字", ordinal = 1)
private String name;
@JSONField(name = "年龄", ordinal = 2)
private Integer age;
@JSONField(name = "邮箱", ordinal = 3)
private String email;
@JSONField(name = "出生日期", format = "yyyy-MM-dd HH:mm", ordinal = 4)
private Date birthday;
@JSONField(name = "不序列化字段", serialize = false, ordinal = 5)
private String noParse;
}
- @JSONField的name属性,可以指定序列化后的名字
- @JSONField的ordinal属性,可以指定序列化后的字段顺序
- @JSONField的serialize属性,可以指定是否序列化该字段
- @JSONField的format属性,可以指定序列化后的格式
@Test
public void ObjectToJsonTest() throws Exception {
Student student = Student.builder()
.id(1).name("张三").age(20).email("zs@sina.com")
.birthday(new Date()).noParse("序列化了")
.build();
// Student(id=1, name=张三, age=20, email=zs@sina.com, birthday=Thu Dec 21 10:06:35 CST 2023, noParse=序列化了)
System.out.println(student);
String jsonString = JSON.toJSONString(student);
// {"age":20,"birthday":"2023-12-21 10:07:27.123","email":"zs@sina.com","id":1,"name":"张三","noParse":"序列化了"}
// {"age":20,"birthday":"2023-12-21 10:07:56.286","email":"zs@sina.com","id":1,"name":"张三"}
// {"age":20,"birthday":"2023-12-21 10:08","email":"zs@sina.com","id":1,"name":"张三"}
// {"id":1,"出生日期":"2023-12-21 10:08","名字":"张三","年龄":20,"邮箱":"zs@sina.com"}
// {"id":1,"名字":"张三","年龄":20,"邮箱":"zs@sina.com","出生日期":"2023-12-21 10:11"}
System.out.println(jsonString);
}