我正在使用Retrofit + OkHttp連接到REST API並使用JSON數據的Android應用程序。我對改造相當陌生,所以我仍然在學習它是如何工作的,但到目前爲止它一直非常流暢。但是,我遇到了一個不尋常的問題。改造:如何解析組合數組和對象的JSON數組?
一個看起來有點像這樣的端點返回的數據:
{
"success": true,
"data": [
[
{
"field": "value1",
...
},
{
"field": "value2",
...
},
...
],
{
"info": "value",
"info2": "value",
"info3": "value",
}
],
"message": "This is the message."
}
在大多數情況下,這是一個非常標準的JSON響應。我們有一個「狀態」值,一個「消息」和一個包含要返回的重要數據的「數據」值。但是,「數據」的結構存在問題。正如你所看到的,它是一個數組,但它不僅僅是一個對象數組。它的第一個元素是值的數組,第二個元素是對象。
Gson不喜歡這樣。如果我想創建一個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;
...
}
但是,沒有按不起作用,因爲「數據」不僅僅是一組對象;它是一個包含對象數組和另一個頂級對象的數組。
我可以將「data」定義爲「Array」,它似乎確實解析了這些值。但是後來他們以通用的LinkedTreeMap對象出現,所以我失去了Gson的JSON-> POJO解析的優點。
有沒有一種優雅的方式來處理像Retrofit/Gson這樣的混合數組?我不對來自API的數據負責,所以我不認爲改變這將是一個選擇。
啊哈!我知道必須有解決方案。謝謝;我會試試這個。 –
增加了更多的初始化代碼 – LukeJanyga