FastJson常用用法

361 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情

常见名词解释:

序列化:将java对象转成JSON字符串

反序列化:将JSON字符串转成java对象

本篇文章主要介绍的是FastJson的常用用法,具体的内容如下:

  1. Java对象转Json字符串
  2. List集合转Json字符串
  3. Map集合转Json字符串
  4. Json字符串转Java对象
  5. Json字符串转List集合
  6. 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)

反序列化小结:

  1. 将JSON字符串转成普通的java对象,很简单。调用JSON.parseObject(JSON字符串,类名.class)即可。
  2. 将Json字符串转List集合,也简单。调用JSON.parseArray(JSON字符串,转换后的集合的泛型的class)即可。
  3. 将Json字符串转Map集合,相对复杂,调用的方法是JSON.parseObject,里面参数复杂点。JSON.parseObject(要转化的JSON字符串, new TypeReference<Map<String, 对应的数据类型>>() {})。