」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Retrofit 中使用自訂 Gson 轉換器高效提取巢狀 JSON 資料?

如何在 Retrofit 中使用自訂 Gson 轉換器高效提取巢狀 JSON 資料?

發佈於2024-12-21
瀏覽:588

How to Efficiently Extract Nested JSON Data Using a Custom Gson Converter in Retrofit?

在Retrofit 中使用自訂Gson 轉換器提取嵌套JSON

許多API 提供具有通用JSON 結構的回應,其中根物件包含嵌套物件包含所需資料的「內容」欄位。然而,大多數 POJO 只對「內容」欄位中的資料進行建模,使得改造類型適配器無法提取並傳回適當的物件。

為了解決這個問題,可以開發一個自訂的 Gson 反序列化器來提取「 content」欄位並傳回嵌入的物件。具體方法如下:

自訂反序列化器:

建立一個類別,實現所需 POJO 類型的 JsonDeserializer 介面。例如,對於“Content”POJO:

class ContentDeserializer implements JsonDeserializer {
    @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 回應直接反序列化到嵌入的「Content」物件。

改造整合:

最後,在建立Retrofit實例時使用自訂的Gson轉換器:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(url)
    .addConverterFactory(GsonConverterFactory.create(gson))
    .build();

現在,當Retrofit反序列化API回應時,它將使用自訂轉換器僅提取「內容」欄位並傳回適當的POJO類型。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3