【问题标题】:How to parse following json so that it is compatible with Realm?如何解析以下 json 使其与 Realm 兼容?
【发布时间】:2020-06-11 17:52:05
【问题描述】:

我正在使用带有 Gson 的 Retrofit 和 RxJava 来解析 json 响应。我有以下 json。

{
"data": [
{
"name": "Featured Albums",
"slug": "featured-albums",
"items": [
 {
"type": "album",
"title": "Ajambari",
"slug": "ajambariUPC027829302603",
"count": 10,
"duration": "",
"is_explicit": false,
"is_premium": false,
"is_trending": false,
"is_popular": false,
"is_featured": false,
"released_date": "",
"logo": ""
}
],
"total_items": 4,
"per_page_items": 6,
"prev_page_url": null,
"next_page_url": null,
"total_page": 1
},
{
"name": "Featured Movies",
"slug": "featured-movies",
"items": [
{
"id": 41,
"title": "Karamat",
"slug": "NPA0D1802638",
"logo": "",
"background": 
"",
"playlist": false,
"count": 1,
"redirect_link": "",
"created_date": 2013
}
],
"total_items": 9,
"per_page_items": 6,
"prev_page_url": null,
"next_page_url": "",
"total_page": 2
}
]
}

如您所见,“项目”可以有不同的结构。为此,我使用 JsonArray 将项目解析为:

public class HomeDatum extends RealmObject {

@SerializedName("name")
@Expose
private String name;
@SerializedName("slug")
@Expose
private String slug;
@SerializedName("items")
@Expose
private JsonArray items = null;
@SerializedName("total_items")
@Expose
private Integer totalItems;
@SerializedName("per_page_items")
@Expose
private Integer perPageItems;
@SerializedName("prev_page_url")
@Expose
private String prevPageUrl;
@SerializedName("next_page_url")
@Expose
private String nextPageUrl;
@SerializedName("total_page")
@Expose
private Integer totalPage;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getSlug() {
    return slug;
}

public void setSlug(String slug) {
    this.slug = slug;
}

public JsonArray getItems() {
    return items;
}

public void setItems(JsonArray items) {
    this.items = items;
}

public Integer getTotalItems() {
    return totalItems;
}

public void setTotalItems(Integer totalItems) {
    this.totalItems = totalItems;
}

public Integer getPerPageItems() {
    return perPageItems;
}

public void setPerPageItems(Integer perPageItems) {
    this.perPageItems = perPageItems;
}

public String getPrevPageUrl() {
    return prevPageUrl;
}

public void setPrevPageUrl(String prevPageUrl) {
    this.prevPageUrl = prevPageUrl;
}

public String getNextPageUrl() {
    return nextPageUrl;
}

public void setNextPageUrl(String nextPageUrl) {
    this.nextPageUrl = nextPageUrl;
}

public Integer getTotalPage() {
    return totalPage;
}

public void setTotalPage(Integer totalPage) {
    this.totalPage = totalPage;
}

但我收到错误:不支持“com.google.gson.JsonArray”类型的字段“items”。这是由 Realm 抛出的。如果我不使用领域,那么它工作得很好。 所以我的问题是如何解析上面的 json 以便它可以被领域支持。 提前谢谢你!

【问题讨论】:

    标签: android json realm


    【解决方案1】:

    你必须像下面这样使用 ResponseClass

    public class ResponseClass {
    
    @SerializedName("data")
    @Expose
    private ArrayList<HomeDatum> items;
    
    public ResponseClass(){};
    
    
    public ArrayList<HomeDatum> getItems() {
        return items;
    }
    
    public void setItems(ArrayList<HomeDatum> items) {
        this.items = items;
    }
    

    }

    并将其传递给 Retrofit 并使用此代码获取响应

    ResponseClass response = response.body();
    ArrayList<HomeDatum> items = response.getItems();
    

    【讨论】:

    • 我已经为“数据”做到了,我的问题是“项目”键。
    猜你喜欢
    • 1970-01-01
    • 2015-12-09
    • 2017-10-18
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多