You need to enable JavaScript to run this app. Java中反序列化GET请求JSON响应:列表嵌套对象的反序列化实现
优惠活动
大模型
产品
解决方案
定价
更多

Java中反序列化GET请求JSON响应:列表嵌套对象的反序列化实现

Java/Android Gson JSON嵌套列表反序列化实现方案

你当前使用的是Gson库的序列化注解,只需新增嵌套对象的实体类,再补全Admin类的对应字段即可完成反序列化,具体实现步骤如下:


步骤1:定义嵌套对象的实体类

首先分别创建Usage和Authorization两个类,对应JSON中两个嵌套数组的子对象结构:

Usage类代码

import com.google.gson.annotations.SerializedName;

public class Usage {
    @SerializedName("id")
    private long id;
    @SerializedName("datetimeUnlocked")
    private String datetimeUnlocked;

    // 构造方法
    public Usage(long id, String datetimeUnlocked) {
        this.id = id;
        this.datetimeUnlocked = datetimeUnlocked;
    }

    // Getter方法
    public long getId() {
        return id;
    }

    public String getDatetimeUnlocked() {
        return datetimeUnlocked;
    }
}

Authorization类代码

import com.google.gson.annotations.SerializedName;

public class Authorization {
    @SerializedName("id")
    private long id;
    @SerializedName("datetimeAccepted")
    private String datetimeAccepted;

    // 构造方法
    public Authorization(long id, String datetimeAccepted) {
        this.id = id;
        this.datetimeAccepted = datetimeAccepted;
    }

    // Getter方法
    public long getId() {
        return id;
    }

    public String getDatetimeAccepted() {
        return datetimeAccepted;
    }
}

步骤2:修改原Admin类,补充嵌套列表字段

在现有Admin类中新增两个List类型的字段,添加对应的序列化注解和Getter方法:

import com.google.gson.annotations.SerializedName;
import java.util.List;

public class Admin {

    @SerializedName("adminId")
    private long adminID;

    @SerializedName("fullName")
    private String adminFullName;

    @SerializedName("email")
    private String adminEmail;

    @SerializedName("dob")
    private String adminDOB;

    @SerializedName("mobileNumber")
    private String adminMobileNumber;

    // 新增嵌套列表字段
    @SerializedName("usages")
    private List<Usage> usages;
    @SerializedName("authorization")
    private List<Authorization> authorizations;

    // 构造方法可保留原有构造,也可新增包含嵌套字段的构造,Gson可通过反射自动赋值无需强制全参数构造
    public Admin(long adminID, String adminFullName, String adminEmail, String adminDOB, String adminMobileNumber, List<Usage> usages, List<Authorization> authorizations) {
        this.adminID = adminID;
        this.adminFullName = adminFullName;
        this.adminEmail = adminEmail;
        this.adminDOB = adminDOB;
        this.adminMobileNumber = adminMobileNumber;
        this.usages = usages;
        this.authorizations = authorizations;
    }

    // 原有Getter方法保留
    public long getAdminID() {
        return adminID;
    }

    public String getAdminFullName() {
        return adminFullName;
    }

    public String getAdminEmail() {
        return adminEmail;
    }

    public String getAdminDOB() {
        return adminDOB;
    }

    public String getAdminMobileNumber() {
        return adminMobileNumber;
    }

    // 新增嵌套列表的Getter方法
    public List<Usage> getUsages() {
        return usages;
    }

    public List<Authorization> getAuthorizations() {
        return authorizations;
    }
}

步骤3:执行反序列化

单独使用Gson反序列化示例

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;

// 替换为你的接口返回的JSON字符串
String jsonResponse = "......";
// 定义反序列化类型
Type listType = new TypeToken<List<Admin>>() {}.getType();
// 执行反序列化
List<Admin> adminList = new Gson().fromJson(jsonResponse, listType);

Retrofit场景使用示例

如果你使用Retrofit作为网络请求框架,直接将接口返回类型定义为List<Admin>即可,Gson转换器会自动完成反序列化:

public interface AdminApi {
    @GET("AllAdmin")
    Call<List<Admin>> getAllAdmin();
}

注意事项

  • Gson会自动处理空的嵌套数组,返回长度为0的List对象,不会抛出空指针异常
  • 如果需要序列化Admin对象回JSON,可补充对应的Setter方法,无序列化需求仅保留Getter即可

内容的提问来源于stack exchange,提问作者Jerome Quah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 02:15:04