跳转至

JSON字符串映射为实体类

将字符串 JSON 映射为实体类

背景

java 模拟接口返回数据时,总是需要将字符串数据映射到实体类中,方便后续处理

1. 添加依赖

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.8</version>
</dependency>

或者使用 Jackson

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

2. 定义实体类

{
    "name": "John Doe",
    "age": 30,
    "email": "john.doe@example.com"
}

@Data
public class User {
    private String name;
    private int age;
    private String email;
}

3.将 JSON 字符串映射为实体类

使用 Gson

import com.google.gson.Gson;

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"John Doe\",\"age\":30,\"email\":\"john.doe@example.com\"}";
        Gson gson = new Gson();
        User user = gson.fromJson(json, User.class);
        System.out.println(user.getName());
        System.out.println(user.getAge());
        System.out.println(user.getEmail());
    }
}

使用 Jackson

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"John Doe\",\"age\":30,\"email\":\"john.doe@example.com\"}";
        ObjectMapper objectMapper = new ObjectMapper();
        // 配置忽略未知属性, 如果json中有字段不在实体类中,可以忽略
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        try {
            User user = objectMapper.readValue(json, User.class);
            System.out.println(user.getName());
            System.out.println(user.getAge());
            System.out.println(user.getEmail());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}