Сервер в настоящее время возвращает json, который выглядит как приведенный ниже json, он содержит поле с именем data
, которое представляет собой массив массивов, каждый из которых имеет несколько объектов, а каждый объект имеет ключ с именем item_type
.Ключ item_type
позволяет мне точно определить, что это за тип объекта, чтобы я мог соответственно преобразовать его в java, но не могу прочитать поле item_type
.
{
"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 cannot be cast to in.example.models.SearchItem
Конечной целью здесь является возможность привести каждый объект в массиве к правильному типу иЕдинственный способ, которым я могу это сделать, это прочитать ключ item_type
в объекте