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. Die meisten POJOs modellieren jedoch 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. Zum Beispiel für ein „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-Konfiguration:
Registrieren Sie den benutzerdefinierten Deserialisierer 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 in den eingebetteten „Inhalt“ zu deserialisieren. Objekt.
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();
Jetzt, wenn Retrofit deserialisiert Bei API-Antworten wird der benutzerdefinierte Konverter verwendet, um nur das Feld „Inhalt“ zu extrahieren und den entsprechenden POJO-Typ zurückzugeben.
Das obige ist der detaillierte Inhalt vonWie lassen sich verschachtelte JSON-Daten mit einem benutzerdefinierten Gson-Konverter in Retrofit effizient extrahieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!