SingleObject
отаю над приложением Android, которое использует Retrofit + OkHttp для подключения к REST API и использования данных JSON. Я довольно новичок в Retrofit, так что я все еще изучаю, как это работает, но пока все прошло довольно гладко. Однако я столкнулся с необычной проблемой.
Одна из конечных точек возвращает данные, которые выглядят примерно так:
{
"success": true,
"data": [
[
{
"field": "value1",
...
},
{
"field": "value2",
...
},
...
],
{
"info": "value",
"info2": "value",
"info3": "value",
}
],
"message": "This is the message."
}
По большей части это довольно стандартный ответ JSON. У нас есть значение «status», «message» и значение «data», содержащее важные возвращаемые данные. Однако есть проблема со структурой «данных». Как видите, это массив, но это не просто массив объектов. Его первый элемент - это массив значений, а второй -объект.
Гсону это не нравится. Если я хочу создать POJO для анализа этого с использованием Gson, я бы ожидал сделать что-то вроде этого:
public class JsonResponse {
@SerializedName("success")
@Expose
boolean success;
@SerializedName("message")
@Expose
String message;
@SerializedName("data")
@Expose
private ArrayList<MyObject> data = new ArrayList<>();
public ArrayList<MyObject> getData() {
return data;
}
public void setData(ArrayList<MyObject> data) {
this.data = data;
}
}
Где «MyObject» является Parcelable, как это:
public class MyObject implements Parcelable {
@SerializedName("field")
@Expose
boolean field;
...
}
Но это не работает, потому что «данные» - это не просто массив объектов; это массив, содержащий массив объектов и другой объект верхнего уровня.
Я могу определить «данные» как «Массив», и кажется, что он анализирует значения. Но затем они становятся общими объектами LinkedTreeMap, поэтому я теряю преимущества анализа GSON JSON-> POJO.
Есть ли элегантный способ обработки смешанного массива в Retrofit / Gson? Я не несу ответственности за данные, поступающие от API, поэтому я не думаю, что изменение будет возможным.