如何解析以下 json 以使其与 Realm 兼容?



我正在使用Retrofit和RxJava与Gson来解析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"的字段"项目"。这是由Realm抛出的。如果我不使用 Realm,那么它就可以正常工作。 所以我的问题是我如何解析上面的 json,以便它可以被 realm 支持。 提前谢谢你!!

你必须使用如下所示的 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();

最新更新