为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 GSON 反序列化嵌套的 JSON 数组?

如何使用 GSON 反序列化嵌套的 JSON 数组?

慕森王 2022-09-14 10:33:36
这是我的一个例子:JSON{    "status": "ok",    "rowCount": 60,    "pageCount": 6,    "value": [{        "CustomerID": 1911,        "CustomerTypeID": 3,           ...         }       ]}我的手机:@SerializedName("CustomerID")public Integer CustomerID;@SerializedName("CustomerTypeID")public Integer CustomerTypeID;我想把所有东西都拉到下面。value如何使用谷歌的GSON来做到这一点?我已经尝试像往常一样这样做,但由于显而易见的原因,它不起作用:Type collectionType = new TypeToken<ArrayList<Customer>>() {}.getType();return gson.fromJson(json, collectionType);
查看完整描述

3 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

您不能跳过根目录 。在这种情况下,最简单的解决方案是 - 创建根:JSON objectPOJO


class Response {

    @SerializedName("value")

    private List<Customer> customers;


    // getters, setters

}

您可以按如下方式使用它:


return gson.fromJson(json, Response.class).getCustomers();


查看完整回答
反对 回复 2022-09-14
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

您不必担心编写自己的POJO。


只需访问 http://www.jsonschema2pojo.org/ 并将您的JSON数据粘贴到此处,它将自动返回您转换后的类,如下所示


-----------------------------------示例.java-----------------------------------


package com.example;


import java.util.List;

import com.google.gson.annotations.Expose;

import com.google.gson.annotations.SerializedName;


public class Example {


@SerializedName("status")

@Expose

private String status;

@SerializedName("rowCount")

@Expose

private Integer rowCount;

@SerializedName("pageCount")

@Expose

private Integer pageCount;

@SerializedName("value")

@Expose

private List<Value> value = null;


public String getStatus() {

return status;

}


public void setStatus(String status) {

this.status = status;

}


public Integer getRowCount() {

return rowCount;

}


public void setRowCount(Integer rowCount) {

this.rowCount = rowCount;

}


public Integer getPageCount() {

return pageCount;

}


public void setPageCount(Integer pageCount) {

this.pageCount = pageCount;

}


public List<Value> getValue() {

return value;

}


public void setValue(List<Value> value) {

this.value = value;

}


}

-----------------------------------.java-----------------------------------


package com.example;


import com.google.gson.annotations.Expose;

import com.google.gson.annotations.SerializedName;


public class Value {


@SerializedName("CustomerID")

@Expose

private Integer customerID;

@SerializedName("CustomerTypeID")

@Expose

private Integer customerTypeID;


public Integer getCustomerID() {

return customerID;

}


public void setCustomerID(Integer customerID) {

this.customerID = customerID;

}


public Integer getCustomerTypeID() {

return customerTypeID;

}


public void setCustomerTypeID(Integer customerTypeID) {

this.customerTypeID = customerTypeID;

}


}

以上两类都是网站自动生成的。


查看完整回答
反对 回复 2022-09-14
?
忽然笑

TA贡献1806条经验 获得超5个赞

import java.util.List;

import com.google.gson.annotations.Expose;

import com.google.gson.annotations.SerializedName;


 public class ExampleClass {


 @SerializedName("status")

 @Expose

 private String status;

 @SerializedName("rowCount")

 @Expose

 private int rowCount;

 @SerializedName("pageCount")

 @Expose

 private int pageCount;

 @SerializedName("value")

 @Expose

 private List<Value> value = null;


 public String getStatus() {

 return status;

  }


 public void setStatus(String status) {

this.status = status;

 }


 public int getRowCount() {

 return rowCount;

  }


  public void setRowCount(int rowCount) {

 this.rowCount = rowCount;

 }


 public int getPageCount() {

   return pageCount;

   }


 public void setPageCount(int pageCount) {

   this.pageCount = pageCount;

   }


  public List<Value> getValue() {

 return value;

 }


  public void setValue(List<Value> value) {

 this.value = value;

  }


 }

-----------------------------------价值.java-----------------------------------


 import com.google.gson.annotations.Expose;

 import com.google.gson.annotations.SerializedName;


 public class Value {


 @SerializedName("CustomerID")

 @Expose

 private int customerID;

 @SerializedName("CustomerTypeID")

 @Expose

 private int customerTypeID;


 public int getCustomerID() {

 return customerID;

}


 public void setCustomerID(int customerID) {

this.customerID = customerID;

}


public int getCustomerTypeID() {

return customerTypeID;

}


public void setCustomerTypeID(int customerTypeID) {

this.customerTypeID = customerTypeID;

 }


 }

/****** 解析与格森 ******/


    GsonBuilder gsonBuilder = new GsonBuilder(); 

    gson = gsonBuilder.create(); 

    ExampleClass resultObj = gson.fromJson(jsonObject.toString(), ExampleClass.class);

    List<Value> yourListOfCustomerValues = resultObj.getValue();

您可以参考这篇关于诺曼·佩特克的Gson的数组映射和对象列表的惊人帖子

Gson 的基础知识、模型注释和嵌套对象的映射


查看完整回答
反对 回复 2022-09-14
  • 3 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信