无法将JSON转换为Java POJO类?

3

我想将这个JSON转换为列表并插入到RecyclerView中,但是由于它给出了3个类,所以我无法实现。那么,如何将这个类转换为父类呢?有谁可以帮助我,这样我就可以制作响应列表并将其放入RecyclerView中。

[
    {
        "id": 114,
        "name_ar": "محمصه زين",
        "latitude": null,
        "longitude": null,
        "name_en": "Mohamsa Zein",
        "description_ar": "",
        "description_en": "",
        "phone": null,
        "mobile": "01110881085",
        "address_ar": "مدينتى، Egypt",
        "address_en": "مدينتى، Egypt",
        "photo": "5b7958dc1c3661534679260.jpg",
        "album": null,
        "created_at": {
            "date": "2018-08-19 11:47:40.000000",
            "timezone_type": 3,
            "timezone": "UTC"
        },
        "updated_at": {
            "date": "2018-10-23 11:00:22.000000",
            "timezone_type": 3,
            "timezone": "UTC"
        }
    },
    {
        "id": 184,
        "name_ar": "محل عصائر فيرتاس",
        "latitude": null,
        "longitude": null,
        "name_en": "Varieties For Juice",
        "description_ar": "",
        "description_en": "",
        "phone": null,
        "mobile": "01024229935",
        "address_ar": "مدينتى، Egypt",
        "address_en": "مدينتى، Egypt",
        "photo": null,
        "album": null,
        "created_at": {
            "date": "2018-10-28 11:40:54.000000",
            "timezone_type": 3,
            "timezone": "UTC"
        },
        "updated_at": {
            "date": "2019-01-02 08:36:04.000000",
            "timezone_type": 3,
            "timezone": "UTC"
        }
    }
]

1
三个类是什么意思?它是一个包含两个对象的数组。 - MetaSnarf
请您提供一下你的课程信息好吗? - Nisheeth Shah
@RakshitNawani 是的,我知道,我需要做的是让父类给我整个响应!你有什么办法吗? - Mohamed El Fwakhry
我使用http://www.jsonschema2pojo.org/创建自己的响应类,您可以根据需要进行自定义尝试。 - Rakshit Nawani
我推荐你在Android Studio中使用这个插件:https://plugins.jetbrains.com/plugin/7654-gsonformat。 - Kingfisher Phuoc
显示剩余2条评论
3个回答

3

我的方法是:

使用GSON库。

我创建了两个模型类

  1. 主类,它包含每个数组项的信息
  2. 自定义日期类,它包含您的日期信息 created_atupdated_at属性

    class MyDate{ public String date; public int timezone_type; public String timezone }

    class Info{ public String id; public String name_ar; ..//其他属性//.. public MyDate created_at; public MyDate updated_at; }

然后将json解析为Info类的数组列表。

List<Info> infoArray = new Gson().fromJson(stringJson, new TypeToken<List<Info>>(){}.getType());

1
如何创建包含id和name等信息的父数组? - Mohamed El Fwakhry
1
如果你的响应类名为Info,则将其作为List<Info>传递。 - Rakshit Nawani
@MohamedElFwakhry,父数组将是“Info”类。请注意,它包含一个“MyDate”类类型的“created_at”和“updated_at”属性。 - MetaSnarf

1
如果我理解你的问题正确,我相信这就是你的意思。请使用此内容。
public  class TestRequest {

    private UpdatedAtEntity updatedAt;
    private CreatedAtEntity createdAt;
    private String photo;
    private String addressEn;
    private String addressAr;
    private String mobile;
    private String descriptionEn;
    private String descriptionAr;
    private String nameEn;
    private String nameAr;
    private int id;

    public UpdatedAtEntity getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(UpdatedAtEntity updatedAt) {
        this.updatedAt = updatedAt;
    }

    public CreatedAtEntity getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(CreatedAtEntity createdAt) {
        this.createdAt = createdAt;
    }

    public String getPhoto() {
        return photo;
    }

    public void setPhoto(String photo) {
        this.photo = photo;
    }

    public String getAddressEn() {
        return addressEn;
    }

    public void setAddressEn(String addressEn) {
        this.addressEn = addressEn;
    }

    public String getAddressAr() {
        return addressAr;
    }

    public void setAddressAr(String addressAr) {
        this.addressAr = addressAr;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getDescriptionEn() {
        return descriptionEn;
    }

    public void setDescriptionEn(String descriptionEn) {
        this.descriptionEn = descriptionEn;
    }

    public String getDescriptionAr() {
        return descriptionAr;
    }

    public void setDescriptionAr(String descriptionAr) {
        this.descriptionAr = descriptionAr;
    }

    public String getNameEn() {
        return nameEn;
    }

    public void setNameEn(String nameEn) {
        this.nameEn = nameEn;
    }

    public String getNameAr() {
        return nameAr;
    }

    public void setNameAr(String nameAr) {
        this.nameAr = nameAr;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public static class UpdatedAtEntity {
        private String timezone;
        private int timezoneType;
        private String date;

        public String getTimezone() {
            return timezone;
        }

        public void setTimezone(String timezone) {
            this.timezone = timezone;
        }

        public int getTimezoneType() {
            return timezoneType;
        }

        public void setTimezoneType(int timezoneType) {
            this.timezoneType = timezoneType;
        }

        public String getDate() {
            return date;
        }

        public void setDate(String date) {
            this.date = date;
        }
    }

    public static class CreatedAtEntity {
        private String timezone;
        private int timezoneType;
        private String date;

        public String getTimezone() {
            return timezone;
        }

        public void setTimezone(String timezone) {
            this.timezone = timezone;
        }

        public int getTimezoneType() {
            return timezoneType;
        }

        public void setTimezoneType(int timezoneType) {
            this.timezoneType = timezoneType;
        }

        public String getDate() {
            return date;
        }

        public void setDate(String date) {
            this.date = date;
        }
    }

    @Override
    public String toString() {
        return "TestRequest{" +
                "updatedAt=" + updatedAt +
                ", createdAt=" + createdAt +
                ", photo='" + photo + '\'' +
                ", addressEn='" + addressEn + '\'' +
                ", addressAr='" + addressAr + '\'' +
                ", mobile='" + mobile + '\'' +
                ", descriptionEn='" + descriptionEn + '\'' +
                ", descriptionAr='" + descriptionAr + '\'' +
                ", nameEn='" + nameEn + '\'' +
                ", nameAr='" + nameAr + '\'' +
                ", id=" + id +
                '}';
    }
}

0
创建一个像这样的POJO类。
public abstract class TempClass {

    @Expose
    @SerializedName("updated_at")
    private UpdatedAt updatedAt;
    @Expose
    @SerializedName("created_at")
    private CreatedAt createdAt;
    @Expose
    @SerializedName("photo")
    private String photo;
    @Expose
    @SerializedName("address_en")
    private String addressEn;
    @Expose
    @SerializedName("address_ar")
    private String addressAr;
    @Expose
    @SerializedName("mobile")
    private String mobile;
    @Expose
    @SerializedName("description_en")
    private String descriptionEn;
    @Expose
    @SerializedName("description_ar")
    private String descriptionAr;
    @Expose
    @SerializedName("name_en")
    private String nameEn;
    @Expose
    @SerializedName("name_ar")
    private String nameAr;
    @Expose
    @SerializedName("id")
    private int id;

    public UpdatedAt getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(UpdatedAt updatedAt) {
        this.updatedAt = updatedAt;
    }

    public CreatedAt getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(CreatedAt createdAt) {
        this.createdAt = createdAt;
    }

    public String getPhoto() {
        return photo;
    }

    public void setPhoto(String photo) {
        this.photo = photo;
    }

    public String getAddressEn() {
        return addressEn;
    }

    public void setAddressEn(String addressEn) {
        this.addressEn = addressEn;
    }

    public String getAddressAr() {
        return addressAr;
    }

    public void setAddressAr(String addressAr) {
        this.addressAr = addressAr;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getDescriptionEn() {
        return descriptionEn;
    }

    public void setDescriptionEn(String descriptionEn) {
        this.descriptionEn = descriptionEn;
    }

    public String getDescriptionAr() {
        return descriptionAr;
    }

    public void setDescriptionAr(String descriptionAr) {
        this.descriptionAr = descriptionAr;
    }

    public String getNameEn() {
        return nameEn;
    }

    public void setNameEn(String nameEn) {
        this.nameEn = nameEn;
    }

    public String getNameAr() {
        return nameAr;
    }

    public void setNameAr(String nameAr) {
        this.nameAr = nameAr;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public static class UpdatedAt {
        @Expose
        @SerializedName("timezone")
        private String timezone;
        @Expose
        @SerializedName("timezone_type")
        private int timezoneType;
        @Expose
        @SerializedName("date")
        private String date;

        public String getTimezone() {
            return timezone;
        }

        public void setTimezone(String timezone) {
            this.timezone = timezone;
        }

        public int getTimezoneType() {
            return timezoneType;
        }

        public void setTimezoneType(int timezoneType) {
            this.timezoneType = timezoneType;
        }

        public String getDate() {
            return date;
        }

        public void setDate(String date) {
            this.date = date;
        }
    }

    public static class CreatedAt {
        @Expose
        @SerializedName("timezone")
        private String timezone;
        @Expose
        @SerializedName("timezone_type")
        private int timezoneType;
        @Expose
        @SerializedName("date")
        private String date;

        public String getTimezone() {
            return timezone;
        }

        public void setTimezone(String timezone) {
            this.timezone = timezone;
        }

        public int getTimezoneType() {
            return timezoneType;
        }

        public void setTimezoneType(int timezoneType) {
            this.timezoneType = timezoneType;
        }

        public String getDate() {
            return date;
        }

        public void setDate(String date) {
            this.date = date;
        }
    }
}

现在可以像这样访问内部类,请查看以下内容。

ArrayList<TempClass> item = new ArrayList<>();

item.get(holder.getAdapterPosition()).getUpdatedAt().getDate();//here access the UpdatedAt class object method. 

item.get(holder.getAdapterPosition()).getCreatedAt().getDate();// here access the CreatedAt class object method.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接