黑马程序员技术交流社区

标题: 【上海校区】三种常用的JSON转换 [打印本页]

作者: 阿莱    时间: 2019-9-25 16:03
标题: 【上海校区】三种常用的JSON转换
本帖最后由 阿莱 于 2019-9-25 16:04 编辑

【上海校区】三种常用的JSON转换


一、JSON的概述

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



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



二、准备工作

1、新建一个maven工程

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


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

[XML] 纯文本查看 复制代码
 <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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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,其它情况考虑另外两种。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2