三种常用的JSON转换

一、JSON的概述

我们做项目,通常会使用前后端分离的ajax交互,那么前后端交互的数据格式通常是json格式。这里既有牵扯到json和对象集合之间的转换,目前市面上的json转换主要有三种:

 

  • Jackson转换
  • FastJson转换
  • Gson转换

 

下面将会对这三种转换进行简单的入门演示:



二、准备工作

1、新建一个maven工程

工程名任意,打包方式选择jar


2、在pom.xml导入下面依赖

[XML] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<dependencies>
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.2.58</version>
       </dependency>
       <dependency>
           <groupId>com.fasterxml.jackson.core</groupId>
           <artifactId>jackson-databind</artifactId>
           <version>2.8.1</version>
       </dependency>
       <dependency>
           <groupId>com.google.code.gson</groupId>
           <artifactId>gson</artifactId>
           <version>2.8.1</version>
       </dependency>
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.11</version>
           <scope>compile</scope>
       </dependency>
   </dependencies>
 
 
   <build>
       <plugins>
           <!-- java编译插件 -->
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>3.7.0</version>
               <configuration>
                   <source>1.8</source>
                   <target>1.8</target>
                   <encoding>UTF-8</encoding>
               </configuration>
           </plugin>
       </plugins>
   </build>



3、创建用于演示的类

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class Student implements Serializable {
 
    private String sid;
    private String name;
    private Integer age;
    private String address;
 
    public Student() {
    }
 
    public Student(String sid, String name, Integer age, String address) {
        this.sid = sid;
        this.name = name;
        this.age = age;
        this.address = address;
    }
 
    public String getSid() {
        return sid;
    }
 
    public void setSid(String sid) {
        this.sid = sid;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
 
    public String getAddress() {
        return address;
    }
 
    public void setAddress(String address) {
        this.address = address;
    }
 
    @Override
    public String toString() {
        return "Student{" +
                "sid='" + sid + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}



三、案例演示

1、JackSon转换

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class JackSonTest {
 
    //对象和json字符串之间的转换
    @Test
    public void jsonAndJsonStr() throws IOException {
 
        //创建学生的对象
        Student student = new Student();
        student.setSid("1001");
        student.setName("张无忌");
        student.setAge(18);
        student.setAddress("冰火岛");
 
        //创建jackson的转换对象
        ObjectMapper om = new ObjectMapper();
        //将对象转为json字符串
        String studentStr = om.writeValueAsString(student);
        System.out.println(studentStr);
 
        //将json字符串转为对象
        Student stu = om.readValue(studentStr, Student.class);
 
        System.out.println("stu = " + stu);
    }
 
    //list集合和json字符串之间的转换
    @Test
    public void listAndJsonStr() throws IOException {
 
        //创建list集合
        List<Student> studentList = new ArrayList<>();
 
        studentList.add(new Student("1001","刘德华",22,"香港"));
        studentList.add(new Student("1002","张学友",21,"香港"));
        studentList.add(new Student("1003","郭富城",18,"香港"));
        studentList.add(new Student("1004","黎明",19,"香港"));
 
        //创建jackson的转换对象
        ObjectMapper om = new ObjectMapper();
        String listStr = om.writeValueAsString(studentList);
 
        System.out.println(listStr);
 
        //json字符串转换为集合
        List<Student> list = om.readValue(listStr, List.class);
 
        System.out.println(list);
    }
}



2、FastJson装换

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class FastJsonTest {
 
    //对象和json字符串之间的转换
    @Test
    public void jsonAndJsonStr() throws IOException {
 
        //创建学生的对象
        Student student = new Student();
        student.setSid("1001");
        student.setName("张无忌");
        student.setAge(18);
        student.setAddress("冰火岛");
 
        //创建fastjson的转换对象
        JSONObject jsonObject = new JSONObject();
        //将对象转换为json字符串
        String studentStr = jsonObject.toJSONString(student);
 
        System.out.println(studentStr);
 
        //将json字符串解析为对象
        Student stu = JSON.parseObject(studentStr, Student.class);
 
        System.out.println(stu);
 
    }
 
    //list集合和json字符串之间的转换
    @Test
    public void listAndJsonStr() throws IOException {
 
        //创建list集合
        List<Student> studentList = new ArrayList<>();
 
        studentList.add(new Student("1001","刘德华",22,"香港"));
        studentList.add(new Student("1002","张学友",21,"香港"));
        studentList.add(new Student("1003","郭富城",18,"香港"));
        studentList.add(new Student("1004","黎明",19,"香港"));
 
        //创建fastjson的转换对象
        JSONObject jsonObject = new JSONObject();
 
        //将集合转换为json字符串
        String listStr = jsonObject.toJSONString(studentList);
 
        System.out.println(listStr);
 
        //将json字符串转换为集合
        List<Student> list = JSON.parseArray(listStr, Student.class);
 
        System.out.println(list);
    }
}



3、Gson转换

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class GsonTest {
 
    //对象和json字符串之间的转换
    @Test
    public void jsonAndJsonStr() throws IOException {
 
        //创建学生的对象
        Student student = new Student();
        student.setSid("1001");
        student.setName("张无忌");
        student.setAge(18);
        student.setAddress("冰火岛");
 
        //创建json转换对象
        Gson gson = new Gson();
 
        //将对象转换为json字符串
        String studentStr = gson.toJson(student);
 
        System.out.println(studentStr);
 
        //将json字符串转换为对象
        Student stu = gson.fromJson(studentStr, Student.class);
 
        System.out.println(stu);
    }
 
    //list集合和json字符串之间的转换
    @Test
    public void listAndJsonStr() throws IOException {
 
        //创建list集合
        List<Student> studentList = new ArrayList<>();
 
        studentList.add(new Student("1001","刘德华",22,"香港"));
        studentList.add(new Student("1002","张学友",21,"香港"));
        studentList.add(new Student("1003","郭富城",18,"香港"));
        studentList.add(new Student("1004","黎明",19,"香港"));
 
        //创建json转换对象
        Gson gson = new Gson();
 
        //将集合转换为json字符串
        String listStr = gson.toJson(studentList);
 
        System.out.println(listStr);
 
        //将json字符串转换为集合
        List<Student> list = gson.fromJson(listStr, List.class);
 
        System.out.println(list);
    }
}



四、小结

Gson性能最好,当不断增加的时候到了100000,Gson明细弱于Jackson和FastJson, 这时候FastJson性能是真的牛,另外还可以看到不管数量少还是多,Jackson一直表现优异。

 

数据量转换比较小时,建议使用Gson,其它情况考虑另外两种。

 更多免费技术资料可关注:annalin1203

posted @ 2020-04-29 09:20  幽暗森林之猪大屁  阅读(1160)  评论(0)    收藏  举报