„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie lassen sich verschachtelte JSON-Daten mit einem benutzerdefinierten Gson-Konverter in Retrofit effizient extrahieren?

Wie lassen sich verschachtelte JSON-Daten mit einem benutzerdefinierten Gson-Konverter in Retrofit effizient extrahieren?

Veröffentlicht am 21.12.2024
Durchsuche:130

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

Extrahieren von verschachteltem JSON mit einem benutzerdefinierten Gson-Konverter in Retrofit

Viele APIs stellen Antworten mit einer gemeinsamen JSON-Struktur bereit, bei der ein Stammobjekt ein verschachteltes Objekt umfasst Feld „Inhalt“ mit den gewünschten Daten. Allerdings modellieren die meisten POJOs nur die Daten innerhalb des Felds „Inhalt“, sodass der Retrofit-Typ-Adapter nicht in der Lage ist, das entsprechende Objekt zu extrahieren und zurückzugeben.

Um dieses Problem zu beheben, kann ein benutzerdefinierter Gson-Deserialisierer entwickelt werden, um das „ „Content“-Feld und gibt das eingebettete Objekt zurück. So geht's:

Benutzerdefinierter Deserializer:

Erstellen Sie eine Klasse, die die JsonDeserializer-Schnittstelle für den gewünschten POJO-Typ implementiert. Für ein „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-Konfiguration:

Registrieren Sie den benutzerdefinierten Deserializer bei einer GsonBuilder-Instanz:

Gson gson = new GsonBuilder()
    .registerTypeAdapter(Content.class, new ContentDeserializer())
    .create();

Diese Gson-Instanz kann jetzt verwendet werden, um JSON-Antworten direkt an das eingebettete „Content“-Objekt zu deserialisieren.

Retrofit-Integration:

Verwenden Sie schließlich den benutzerdefinierten Gson-Konverter, wenn Sie die Retrofit-Instanz erstellen:

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

Wenn Retrofit nun API-Antworten deserialisiert, verwendet es den benutzerdefinierten Konverter, um nur das Feld „Inhalt“ zu extrahieren und den entsprechenden POJO-Typ zurückzugeben.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3