【问题标题】:Create a GSON POJO class for a Complex Json Object?为复杂的 Json 对象创建 GSON POJO 类?
【发布时间】:2016-08-08 08:01:51
【问题描述】:

我正在为我的 API 连接使用 Gson GsonConverterFactory 的改造。我无法获取我的 API。

{
    status: 100,
    tb_name: "list",
    data: {
        1: {
            distance: "",
            Busid: "18",
            locid: "6309",
            business_name: " Park",
            category_name: "Activities",
            area: "Sharjah",
            cat_image: "14645915394584643.png",
            cusine: "",
            city: "Sharjah",
            lat_long: "25.342403, 55.379542",
            image: "14650439123004854.jpg",
            is_fav: "No"
        },
        2: {
            distance: "",
            Busid: "56",
            locid: "6311",
            business_name: "Bowling City",
            category_name: "Activities",
            area: "Abu Dhabi",
            cat_image: "14645915394584643.png",
            cusine: "",
            city: "Abu Dhabi",
            lat_long: "24.494183, 54.367608",
            image: "14650440703886102.jpg",
            is_fav: "No"
        },
        3: {
            distance: "",
            Busid: "56",
            locid: "6312",
            business_name: "Bowling City",
            category_name: "Activities",
            area: "Deira, Dubai",
            cat_image: "14645915394584643.png",
            cusine: "",
            city: "Dubai",
            lat_long: "25.251964, 55.332805",
            image: "14650440703886102.jpg",
            is_fav: "No"
        },
        4: {
            distance: "",
            Busid: "56",
            locid: "6310",
            business_name: "Bowling City",
            category_name: "Activities & Leisure",
            area: "Al Ain Mall, Al Ain",
            cat_image: "14645915394584643.png",
            cusine: "",
            city: "Al Ain",
            lat_long: "24.222321, 55.782205",
            image: "14650440703886102.jpg",
            is_fav: "No"
        }

    }
}

我创建了 pojo 类

public class ktbresponse {
    private String status;
    private String tb_name;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getTb_name() {
        return tb_name;
    }

    public void setTb_name(String tb_name) {
        this.tb_name = tb_name;
    }

    public application.myrestapi.com.myrestapiapplication.model.data getData() {
        return data;
    }

    public void setData(application.myrestapi.com.myrestapiapplication.model.data data) {
        this.data = data;
    }

    private data data;
}


public class data {
    private String distance;
    private String Busid;

    public String getDistance() {
        return distance;
    }

    public void setDistance(String distance) {
        this.distance = distance;
    }

    public String getBusid() {
        return Busid;
    }

    public void setBusid(String busid) {
        Busid = busid;
    }

    public String getLocid() {
        return locid;
    }

    public void setLocid(String locid) {
        this.locid = locid;
    }

    public String getBusiness_name() {
        return business_name;
    }

    public void setBusiness_name(String business_name) {
        this.business_name = business_name;
    }

    private String locid;
    private String business_name;
}

但是当我尝试打印时

Log.e("apiResponse",apiResponse.getStatus());Log.e("apiResponse",apiResponse.getData().getBusiness_name());

只打印状态。没有工作数据。我第一次看到这种类型的结构。让我知道我做错了什么。如何为这个结构创建 Pojo 类?

【问题讨论】:

  • 您必须在 ktbresponse 类中使用 List 数据而不仅仅是简单的 Data 对象。
  • @parohy java.lang.IllegalStateException: 应为 BEGIN_ARRAY,但在第 1 行第 40 列路径 $.data 处为 BEGIN_OBJECT
  • 你的 json 意味着你有一个对象 data,它有对象 1 ,2 and 3 ,我认为它可能会得到更多的对象 5 、 6 ...同时它不是一个数组,这是不是正确的方法,因为在 POJO 中,您必须拥有名称为 1 2 3 的属性(属性),这是无效的(变量名称不能以数字开头)所以我建议重新创建一个新的json 将具有 data[] 数组,这样您就可以在 POJO 中使用List<Data> data;,截至目前,如果您使用List,您将收到异常Expected BEGIN_ARRAY but was BEGIN_OBJECT...
  • 你的休息怎么样?你是如何定义接口的?在 json 中,只需 "data" : {object}, {object}... 删除这些数字
  • P.S:我上面的评论是关于使用 GSON (自动解析),但如果你想手动解析 json 响应,即:jsonObj.getJsonObject("1"); 并附加对象(1,2,3. ..) 放入一个`Data`类型的数组中它是完全有效的。

标签: android json gson retrofit jsonobject


【解决方案1】:

您可以修改 API 吗?如果是,只需将“数据”对象更改为数组,而不是具有字段“1”、“2”、“3”的对象。 Json 看起来像:

{
status: 100,
tb_name: "list",
data: [
    {
        distance: "",
        Busid: "18",
        locid: "6309",
        business_name: " Park",
        category_name: "Activities",
        area: "Sharjah",
        cat_image: "14645915394584643.png",
        cusine: "",
        city: "Sharjah",
        lat_long: "25.342403, 55.379542",
        image: "14650439123004854.jpg",
        is_fav: "No"
    },
    {
        distance: "",
        Busid: "56",
        locid: "6311",
        business_name: "Bowling City",
        category_name: "Activities",
        area: "Abu Dhabi",
        cat_image: "14645915394584643.png",
        cusine: "",
        city: "Abu Dhabi",
        lat_long: "24.494183, 54.367608",
        image: "14650440703886102.jpg",
        is_fav: "No"
    },
    {
        distance: "",
        Busid: "56",
        locid: "6312",
        business_name: "Bowling City",
        category_name: "Activities",
        area: "Deira, Dubai",
        cat_image: "14645915394584643.png",
        cusine: "",
        city: "Dubai",
        lat_long: "25.251964, 55.332805",
        image: "14650440703886102.jpg",
        is_fav: "No"
    },
    {
        distance: "",
        Busid: "56",
        locid: "6310",
        business_name: "Bowling City",
        category_name: "Activities & Leisure",
        area: "Al Ain Mall, Al Ain",
        cat_image: "14645915394584643.png",
        cusine: "",
        city: "Al Ain",
        lat_long: "24.222321, 55.782205",
        image: "14650440703886102.jpg",
        is_fav: "No"
    }    
  ]
}

而在模型中你只会有一个列表

【讨论】:

  • 它不可能修改。它是很久以前完成的,并且是由某人完成的
  • 所以第二个问题是数据对象的数量是否发生了变化。如果是,您可以像这样创建一个 pojo:{ @SerializedName("1") Data firstData; @SerializedName("2") 数据 secondData; ... }
  • 如果没有,那您​​就必须创建一个非常复杂的自定义反序列化器。
  • 没有对象可能会改变..有时数组长度最大为 10
  • 循环中是否有任何选项 SerializedName("1") 或其他内容
【解决方案2】:

Gson 格式化程序可以解决您的问题。您可以从您的 json 模板创建模型。

【讨论】:

  • 我已经用 gsonformat 测试了你的 json 模板,似乎 json 格式不正确。 GsonFormat链接。
猜你喜欢
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 2020-07-30
相关资源
最近更新 更多