亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 retrofit2 處理包裹在一個 JSON 對象中的 JSON 對象?

如何使用 retrofit2 處理包裹在一個 JSON 對象中的 JSON 對象?

慕斯709654 2023-06-08 19:27:21
我想使用改造接收項目并將它們解析為 Java 列表。但是,服務器響應不是 JSON 數組,而是包含項目的 JSON 對象。這就是為什么改造不能只將響應轉換為 java 列表的原因。響應看起來像這樣:{    "4": {        "key": "value",        ...    },    "5": {        ...    },     ...}通常,我會嘗試收到這樣的物品:@GET("items")Call<List<Item>> getItems();但這顯然行不通,Retrofit 回應:Expected BEGIN_ARRAY but was BEGIN_OBJECT使用改造將此對象轉換為 Java 列表的最佳選擇是什么?
查看完整描述

2 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

我個人會分 2 個步驟執行此操作,以避免必須為反序列化編寫自定義適配器。

我會寫這樣的界面:

@GET("items")
Call<Map<String, Item>> getItems();

一旦您根據響應調用 API,我就會調用values().

需要考慮的是,因為 API 返回的是地圖而不是列表,所以無法保證您生成的任何列表的順序都是一致的。json 標準不定義對象的任何順序,除非它們在 json 數組中。


查看完整回答
反對 回復 2023-06-08
?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

當您說響應是 List 時,JSON 應該是“ARRAY”。


例如:


[ "a", "b" ]

或者


   "xxx": [ "a", "b" ] 

}

在任何一種情況下,您想要解析的對象如下所示:


List<String>對于第一個。


Thing對于第二個。


看起來Thing像:


class Thing {

   public List<String> xxx;

}

你正在嘗試解析這個:


{

    "4": {

        "key": "value",

        ...

    },

    "5": {

        ...

    }, 

    ...

}


那么根據以上信息,您認為解析后的響應是什么樣的?(提示:您可以嘗試像這個Java POJO 生成器這樣的東西來獲得一個想法;)


查看完整回答
反對 回復 2023-06-08
  • 2 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號