android - 如何解析以下 json 使其与 Realm 兼容?
问题描述
我正在使用带有 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”类型的字段“项目”。这是由 Realm 抛出的。如果我不使用 Realm,那么它工作得很好。所以我的问题是如何解析上面的 json 以便它可以被领域支持。先感谢您!!
解决方案
您必须使用 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();
推荐阅读
- microsoft-graph-api - Microsoft Graph api 查询管理员授予的应用程序权限
- apache-kafka - 使用dataloader接口kafka数据
- html - 我如何悬停图标并显示输入
- jupyter-notebook - Z3Py 求解器在 Jupyter 中产生不同的结果
- r - 如何在不使用 for 循环的情况下比较两个数据框列?
- elasticsearch - 弹性搜索 - 在搜索过程中真正需要“获取”阶段
- ios - 将 Xcode 项目从一台计算机转移到另一台计算机会带来随机错误?
- reactjs - 为什么返回类型被评估为 (boolean | function)?
- azure - Azure Web App 部署槽,我可以将槽应用换成主要生产,然后删除旧的吗?
- python - Python:如何在某些条件下找到列中元素的索引