[英]How to Parse Nested - Multiple Json Objects using Retrofit in Java
[英]How to Parse Nested / Multiple Json Objects using Retrofit
我正在解析的 JSON 如下所示:
{ "version": 1
"data": {
"1001": {
"id": 1001,
"name": "herp",
"into": [
"3111": "we"
]
},
"1032": {
"id": 1002,
"name": "derp",
"into": [
"36": "w",
"12341: "c"
],
"tags": [
"hi there"
],
"cost" {
"even": 15
}
},
"1603": {
"id": 1003,
"name": "her",
"into": [
"37": "dll",
"58": "eow",
"32145": "3a"
],
"cost" {
"highest": 325
"lowest": 100
}
},
.... Even more data
}
“數據”中的 Json 會持續一段時間並且沒有設置端點。 我無法控制 Json,我只是想閱讀它。 不幸的是,使用我的課程代碼我無法讓它工作。 當我進行改造調用時,“數據”中的信息為空。
我已經嘗試了多次迭代來實現這一點,包括使用反序列化器和重構我的 POJO 代碼。 這是我的 Data 類的當前狀態:
public class Data {
private Map<String, Item> itemData;
// Relevant Getters, Setters and Constructors //
}
對於我的項目類,主要問題是未設置 JSON 內容,它有時會有所不同。 正如您在上面看到的,“into”中的值會有所不同,有時項目中的事物數量也會發生變化,例如“標簽”或“成本”:
public class Item {
private int id;
private String name;
private String group;
private String description;
private Map<String, String> into;
private List<String> tags;
private Map<String, Integer> cost;
// Relevant Getters, Setters and Constructors //
當我使用此代碼時,我的數據類是空的,我在日志中沒有看到任何錯誤,所以我似乎無法弄清楚 GSON 不使用它的原因。
如果你想看看我是如何構建我的 RestClient 的,這里是:
RestAdapter.Builder builder = new RestAdapter.Builder()
.setEndpoint(ROOT)
.setClient(new OkClient(new OkHttpClient()))
.setLogLevel(RestAdapter.LogLevel.FULL);
RestAdapter restAdapter = builder.build();
REST_CLIENT = restAdapter.create(DataApi.class);
我知道我的 Rest Query 有效,因為我可以獲得“version”中的內容,但數據中的所有內容都為空。
我正式成為一個愚蠢的磨砂膏,並徹底查看了最簡單的修復方法,應該撤銷我的帳戶和開發人員頭銜。
這就是我應該做的:
public class ItemGroup {
private String version;
private Map<String,Item> data;
//...Man i'm so dumb...
}
作為未來的參考。 這樣做的原因是因為 JSON 采用這種格式 { { } { } { } }。 這意味着您有 3 個對象對象,而不是 { [ ] [ ] [ ] } ,后者是列表的 3 個對象。 我所做的是將 { { } { } { } } 視為 { { { } { } { } } }。 這是不正確的。 通過使用基本上是成對集合的地圖,我們可以用 Map 模仿 { { } { } { } }。
映射對象 { {密鑰對對象} {密鑰對對象} {密鑰對對象} }
只是對您的 Pojo 的一個快速想法:不確定這是否有效。 也許編寫一個自定義反序列化器。
public class YourResponse {
int version;
Data data;
class Data {
Subdata subData;
}
class Subdata {
private int id;
private String name;
private ArrayList<Into> into;
private ArrayList<String> tags;
//...
}
class Into {
// "3111": "we"
private String into;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.