簡體   English   中英

如何使用 Retrofit 解析嵌套/多個 Json 對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM