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
相关产品推荐
相关产品推荐

