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
Patricia ArquetteOriginal
2024-11-23 06:40:25869Durchsuche

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);
    }
}

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);
    }
}

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();

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);

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!

Stellungnahme:
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