Heim > Java > javaLernprogramm > Wie extrahiere ich verschachtelte JSON-Objekte aus Retrofit-Antworten mithilfe benutzerdefinierter GSON-Deserialisierer?

Wie extrahiere ich verschachtelte JSON-Objekte aus Retrofit-Antworten mithilfe benutzerdefinierter GSON-Deserialisierer?

Patricia Arquette
Freigeben: 2024-11-23 06:40:25
Original
855 Leute haben es durchsucht

How to Extract Nested JSON Objects from Retrofit Responses using Custom GSON Deserializers?

Extrahieren verschachtelter JSON-Objekte mit GSON in Retrofit

Beim Einsatz einer API, die mit JSON-Objekten antwortet, die verschachtelte Daten enthalten, kann es schwierig werden Extrahieren und bearbeiten Sie die relevanten Daten direkt. Dies gilt insbesondere dann, wenn die gewünschten Daten in einem zwischengeschalteten „Inhalts“-Feld vergraben sind.

Um diese Hürde zu überwinden, bietet GSON einen Mechanismus zum Erstellen benutzerdefinierter Deserialisierer, mit denen bestimmte Felder aus dem Antwort-JSON extrahiert werden können .

Erstellen eines benutzerdefinierten Deserialisierers

Um einen benutzerdefinierten Deserialisierer zu erstellen, definieren Sie eine neue Klasse, die die JsonDeserializer-Schnittstelle implementiert, wie unten gezeigt:

class MyDeserializer implements JsonDeserializer<Content> {
    @Override
    public Content deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
        throws JsonParseException {
        // Get the "content" element from the parsed JSON
        JsonElement content = je.getAsJsonObject().get("content");
        
        // Deserialize it. Use a new instance of Gson to avoid infinite recursion
        return new Gson().fromJson(content, Content.class);
    }
}
Nach dem Login kopieren

Generischer Deserializer für verschiedene Inhaltstypen

Wenn Sie unterschiedliche Arten von Nachrichten haben, aber alle eine teilen Im Feld „Inhalt“ können Sie einen generischen Deserialisierer erstellen:

class MyDeserializer<T> implements JsonDeserializer<T> {
    @Override
    public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
        throws JsonParseException {
        // Get the "content" element from the parsed JSON
        JsonElement content = je.getAsJsonObject().get("content");
        
        // Deserialize it. Use a new instance of Gson to avoid infinite recursion
        return new Gson().fromJson(content, type);
    }
}
Nach dem Login kopieren

Registrieren des Deserialisierer in Retrofit

Sobald der Deserialisierer erstellt wurde, registrieren Sie ihn bei der GsonConverterFactory, wenn Sie eine Retrofit-Instanz erstellen:

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

Beispielverwendung:

Mit dem benutzerdefinierten Deserialisierer können Sie die JSON-Antwort jetzt direkt in deserialisieren das gewünschte POJO:

Content c = gson.fromJson(myJson, Content.class);
Nach dem Login kopieren

Durch die Verwendung benutzerdefinierter Deserialisierer erhalten Sie die Flexibilität, den JSON-Parsing-Prozess an Ihre spezifischen Anforderungen anzupassen, sodass Sie problemlos auf verschachtelte Daten in den JSON-Antworten zugreifen und diese bearbeiten können.

Das obige ist der detaillierte Inhalt vonWie extrahiere ich verschachtelte JSON-Objekte aus Retrofit-Antworten mithilfe benutzerdefinierter GSON-Deserialisierer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage