携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情
常见名词解释:
序列化:将java对象转成JSON字符串
反序列化:将JSON字符串转成java对象
本篇文章主要介绍的是FastJson的常用用法,具体的内容如下:
- Java对象转Json字符串
- List集合转Json字符串
- Map集合转Json字符串
- Json字符串转Java对象
- Json字符串转List集合
- Json字符串转Map集合
1.Java对象转Json字符串
创建实体类
@Data
public class Student {
private Integer id;
private String name;
private Integer age;
private String email;
private Date birthday;
}
JSON.toJSONString(对象)可以将对象转换成JSON字符串
public class TestFastJson {
public Date getDate() {
Date date = new Date();
return date;
}
@Test
//Java对象,Student对象,序列化为Json格式字符串
public void testObjectToJson() {
Student student = new Student();
student.setId(1);
student.setName("张三");
student.setAge(20);
student.setEmail("zs@sina.com");
student.setBirthday(getDate());
//将student对象,转成Json格式字符串
String jsonString = JSON.toJSONString(student);
System.out.println(jsonString);
}
}
实验结果
{"age":20,"birthday":1661669349299,"email":"zs@sina.com","id":1,"name":"张三"}
2.List集合转Json字符串
JSON.toJSONString(list集合对象)可以将list集合转换成JSON字符串
注意:这里的getDate()方法在标题1里面已经有写过了,所以这里不在写,大家知道就好,哈哈哈。
@Test
//Java中的集合List,序列化为Json格式字符串
public void testListToJson() {
List<Student> list = new ArrayList<>();
//集合List,存储student对象
Student student1 = new Student();
student1.setId(1);
student1.setName("张三");
student1.setAge(20);
student1.setEmail("zs@sina.com");
student1.setBirthday(getDate());
Student student2 = new Student();
student2.setId(2);
student2.setName("李四");
student2.setAge(22);
student2.setEmail("ls@126.com");
student2.setBirthday(getDate());
//将student对象存储到list集合
list.add(student1);
list.add(student2);
//List集合,序列化为Json格式字符串
String jsonString = JSON.toJSONString(list);
System.out.println(jsonString);
}
实验结果:
[
{"age":20,"birthday":1661670290847,"email":"zs@sina.com","id":1,"name":"张三"},
{"age":22,"birthday":1661670290847,"email":"ls@126.com","id":2,"name":"李四"}
]
3.Map集合转Json字符串
JSON.toJSONString(map集合对象)可以将map集合转换成JSON字符串
@Test
//Java中的集合Map,序列化为Json格式字符串
public void testMapToJson () {
//创建Map集合,键为字符串类型,值是student对象
Map<String,Student> map = new HashMap<>();
Student student1 = new Student();
student1.setId(1);
student1.setName("张三");
student1.setAge(20);
student1.setEmail("zs@sina.com");
student1.setBirthday(getDate());
Student student2 = new Student();
student2.setId(2);
student2.setName("李四");
student2.setAge(22);
student2.setEmail("ls@126.com");
student2.setBirthday(getDate());
//Map集合储存Student对象
map.put("student1",student1);
map.put("student2",student2);
String jsonString = JSON.toJSONString(map);
System.out.println(jsonString);
}
实验结果:
{
"student2":{"age":22,"birthday":1661672018387,"email":"ls@126.com","id":2,"name":"李四"},
"student1":{"age":20,"birthday":1661672018387,"email":"zs@sina.com","id":1,"name":"张三"}
}
序列化小结:你会发现无论你是普通的java对象,还是list集合亦或是map集合,你只要想将他们转换成JSON字符串,那么你只需调用JSON.toJSONString(相应对象)即可。
4.Json字符串转Java对象
JSON.parseObject(JSON字符串,类名.class)可以将JSON字符串转化为相应的java对象。
@Test
//Json格式字符串,反序列化回到java对象
public void testJsonToObject() {
String jsonString = "{"age":20,"birthday":1661669349299,"email":"zs@sina.com","id":1,"name":"张三"}";
//JSON类的静态方法 parseObject
//传递要序列化的Json字符串,传递Java对象的class对象
Student student = JSON.parseObject(jsonString, Student.class);
System.out.println(student);
}
实验结果:
Student(id=1, name=张三, age=20, email=zs@sina.com, birthday=Sun Aug 28 14:49:09 CST 2022)
5.Json字符串转List集合
JSON.parseArray(JSON字符串,转换后的集合的泛型的class)可以将JSON字符串转化为list集合。
@Test
//Json格式字符串,反序列化回到list集合
public void testJsonToList() {
String jsonString = "[\n" +
"{"age":20,"birthday":1661670290847,"email":"zs@sina.com","id":1,"name":"张三"},\n" +
"{"age":22,"birthday":1661670290847,"email":"ls@126.com","id":2,"name":"李四"}\n" +
"]";
//传递JSON字符串,传递转换后的集合的泛型的class
List<Student> list = JSON.parseArray(jsonString, Student.class);
for (Student student : list) {
System.out.println(student);
}
}
实验结果:
Student(id=1, name=张三, age=20, email=zs@sina.com, birthday=Sun Aug 28 15:04:50 CST 2022)
Student(id=2, name=李四, age=22, email=ls@126.com, birthday=Sun Aug 28 15:04:50 CST 2022)
6.Json字符串转Map集合
将JSON字符串直接转为map集合,过程相比上面略微复杂。可以通过JSON.parseObject(要转化的JSON字符串, new TypeReference<Map<String, 对应的数据类型>>() {})
@Test
//Json格式字符串,反序列化回到map集合
public void testJsonToMap() {
String jsonString = "{\n" +
""student2":{"age":22,"birthday":1661672018387,"email":"ls@126.com","id":2,"name":"李四"},\n" +
""student1":{"age":20,"birthday":1661672018387,"email":"zs@sina.com","id":1,"name":"张三"}\n" +
"}";
//JSON类的静态方法,parseObject
//JSONObject jsonObject = JSON.parseObject(jsonString);
Map<String, Student> map = JSON.parseObject(jsonString, new TypeReference<Map<String, Student>>() {});
for (String key : map.keySet()){
System.out.println(key+":"+map.get(key));
}
}
实验结果:
student2:Student(id=2, name=李四, age=22, email=ls@126.com, birthday=Sun Aug 28 15:33:38 CST 2022)
student1:Student(id=1, name=张三, age=20, email=zs@sina.com, birthday=Sun Aug 28 15:33:38 CST 2022)
反序列化小结:
- 将JSON字符串转成普通的java对象,很简单。调用JSON.parseObject(JSON字符串,类名.class)即可。
- 将Json字符串转List集合,也简单。调用JSON.parseArray(JSON字符串,转换后的集合的泛型的class)即可。
- 将Json字符串转Map集合,相对复杂,调用的方法是JSON.parseObject,里面参数复杂点。JSON.parseObject(要转化的JSON字符串, new TypeReference<Map<String, 对应的数据类型>>() {})。