使用Retrofit 中的自訂Gson 轉換器來擷取巢狀JSON
許多API 提供具有通用JSON 結構的回應,其中根物件包含嵌套物件包含所需資料的「內容」欄位。然而,大多數 POJO 只對「內容」欄位中的資料進行建模,使得改造類型適配器無法提取並傳回適當的物件。
為了解決這個問題,可以開發一個自訂的 Gson 反序列化器來提取「 content」欄位並傳回嵌入的物件。操作方法如下:
自訂反序列化器:
建立一個類,實作所需 POJO 類型的 JsonDeserializer 介面。例如,對於「Content」POJO:
class ContentDeserializer implements JsonDeserializer<Content> { @Override public Content deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) throws JsonParseException { // Extract the "content" element JsonElement content = je.getAsJsonObject().get("content"); // Deserialize the content using a new Gson instance return new Gson().fromJson(content, Content.class); } }
Gson 配置:
使用GsonBuilder 實例註冊自訂反序列化器:
Gson gson = new GsonBuilder() .registerTypeAdapter(Content.class, new ContentDeserializer()) .create();
此Gson 實例現在可用於將JSON 回應直接反序列化為嵌入的「內容」
Retrofit 整合:Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
以上是如何在 Retrofit 中使用自訂 Gson 轉換器高效提取巢狀 JSON 資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!