服务器当前返回一个类似于下面给出的 json 的 json,它包含一个名为 data
的字段,它是一个数组数组,每个数组都有多个对象,每个对象都有一个名为 item_type
。关键的 item_type
允许我准确地弄清楚它是什么类型的对象,以便我可以在 java 中相应地转换它,但我无法读取 item_type
字段。 p>
{
"page":1,
"data":[
[
{
"id":1,
"name":"xyz",
"item_type":1
}
],
[
{
"cid":1,
"item_type":2
}
],
[
{
"item":1,
"item_type":3
}
]
]
}
改造后的界面是这样的
@GET("Search")
Observable<SearchResults> search(@Query(ParamsHolder.GET_QUERY)
String query, @Query(ParamsHolder.GET_PAGE) int page);
其中 SearchResults
类如下所示
public class SearchResults {
int page;
List<List<Object>> data;
public int getPage() {
return page;
}
public List<List<Object>> getData() {
return data;
}
}
我能够很好地获取数据,但我需要读取每个列表中的对象。为此,我使用了以下代码
public class SearchItem {
int item_type;
public int getItemType() {
return item_type;
}
}
List<List<Object>> data = objects.getData();
for (int i = 0; i < data.size(); i++) {
List<Object> list = data.get(i);
for (int j = 0; j < list.size(); j++) {
SearchItem item = (SearchItem) list.get(i);
Log.d("search", " json=" + list.get(j).toString());
Log.d("search", " item=" + item.toString() + " type=" + item.getItemType());
}
}
我创建了一个虚拟的 SearchItem
类,我认为它可以让我对 Object
类型进行类型转换,这样我就可以读取 item_type
,这将让我确切地知道这是什么对象的类型。
它抛出错误com.google.gson.internal.LinkedTreeMap无法转换为in.example.models.SearchItem
这里的最终目标是能够将数组中的每个对象转换为正确的类型,而我能做到这一点的唯一方法是读取对象中的 item_type
键
最佳答案
使用Gson直接解析响应
更新搜索结果
public class SearchResults {
int page;
List<List<SearchItem>> data;
public int getPage() {
return page;
}
public List<List<SearchItem>> getData() {
return data;
}
}
您可以像这样访问 item_type
searchResult.getData.get(i).get(0).item_type
关于java - 无法使用gson和retrofit从对象读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54633760/