Java JSON转实体多层对象

引言

在Java开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式。它具有简洁、易读、易解析的特点,因此在Web开发、移动应用开发等领域广泛应用。而在Java中,使用JSON库可以方便地将JSON字符串转换为Java对象,实现JSON与实体对象的互相转换。

本文将介绍如何将JSON字符串转换为多层实体对象,并提供相应的代码示例。我们将通过一个简单的场景来说明这个过程:假设我们有一个学生类(Student),其中包含了学生的基本信息和一个嵌套的课程类(Course),课程类包含了课程名称和成绩。

准备工作

在开始之前,我们需要先引入一个JSON库。在Java中,有许多JSON库可供选择,比如Jackson、Gson等。本文将使用Jackson库来进行示例演示。

首先,我们需要在项目的pom.xml(如果使用Maven项目)中添加Jackson的依赖:

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.3</version>
    </dependency>
</dependencies>

然后,我们需要导入Jackson的相关类:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;

JSON字符串转换为实体对象

首先,我们需要定义学生类(Student)和课程类(Course):

public class Course {
    private String name;
    private int score;

    // 构造函数、Getter和Setter方法
}

public class Student {
    private String name;
    private int age;
    private List<Course> courses;

    // 构造函数、Getter和Setter方法
}

接下来,我们可以将JSON字符串转换为学生对象(Student):

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"Tom\",\"age\":18,\"courses\":[{\"name\":\"Math\",\"score\":90},{\"name\":\"English\",\"score\":85}]}";

        ObjectMapper objectMapper = new ObjectMapper();

        try {
            Student student = objectMapper.readValue(json, Student.class);
            System.out.println(student.getName());
            System.out.println(student.getAge());
            System.out.println(student.getCourses());
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们首先定义了一个JSON字符串,表示一个学生的信息和课程成绩。然后,我们使用ObjectMapper类的readValue()方法将JSON字符串转换为学生对象(Student)。最后,我们可以通过学生对象的Getter方法获取学生的信息和课程成绩,并打印出来。

运行上述代码,输出结果如下:

Tom
18
[Course{name='Math', score=90}, Course{name='English', score=85}]

可以看到,我们成功地将JSON字符串转换为了学生对象,并可以获取到其中的属性值。

实体对象转换为JSON字符串

除了将JSON字符串转换为实体对象,我们还可以将实体对象转换为JSON字符串。下面是一个示例:

public class Main {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("Tom");
        student.setAge(18);

        Course mathCourse = new Course();
        mathCourse.setName("Math");
        mathCourse.setScore(90);

        Course englishCourse = new Course();
        englishCourse.setName("English");
        englishCourse.setScore(85);

        List<Course> courses = new ArrayList<>();
        courses.add(mathCourse);
        courses.add(englishCourse);

        student.setCourses(courses);

        ObjectMapper objectMapper = new ObjectMapper();

        try {
            String json = objectMapper.writeValueAsString(student);
            System.out.println(json);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们创建了一个学生对象(Student),并设置了该学生的基本信息和课程成绩。然后,我们使用ObjectMapper类的writeValueAsString()方法将学生对象转换为JSON字符串。最后,我们将转换后的JSON字符串打印出来。

运行上述代码,输出结果如下:

{
  "name" : "Tom",
  "age" : 18,
  "courses" : [ {
    "name" : "Math",