Heim > Java > javaLernprogramm > Hauptteil

Wie extrahiere ich verschachtelte JSON-Objekte aus API-Antworten mit Gson und Retrofit?

Patricia Arquette
Freigeben: 2024-11-19 04:26:02
Original
622 Leute haben es durchsucht

How to Extract Nested JSON Objects from API Responses using Gson and Retrofit?

Extrahieren verschachtelter JSON-Objekte mit Gson und Retrofit

In modernen Anwendungen stößt man häufig auf API-Antworten mit verschachtelten JSON-Strukturen. Dies kann zu Herausforderungen führen, wenn Sie mit bestimmten Datenfeldern innerhalb der verschachtelten Hierarchie arbeiten möchten. In dieser Anleitung wird gezeigt, wie Sie einen benutzerdefinierten Gson-Deserialisierer erstellen, um mithilfe von Retrofit den gewünschten Inhalt aus verschachtelten JSON-Objekten zu extrahieren.

Problemstellung

Betrachten Sie eine API-Antwort mit der folgenden Struktur:

{
  'status': 'OK',
  'reason': 'Everything was fine',
  'content': {
    < real data here >
  }
}
Nach dem Login kopieren

Sie haben POJOs mit Status- und Grundfeldern, aber die Daten, die Sie benötigen, befinden sich im verschachtelten Inhalt Objekt.

Lösung

Um den verschachtelten Inhalt zu extrahieren, erstellen Sie einen benutzerdefinierten Deserialisierer, der den eigentlichen POJO-Deserialisierer umschließt. So funktioniert es:

  1. Erstellen Sie ein Inhalts-POJO: Definieren Sie ein POJO zur Darstellung der verschachtelten Inhaltsdaten.
  2. Implementieren Sie einen Deserializer: Erstellen Sie einen Deserialisierer, der den Inhalt extrahiert Feld:
class MyDeserializer implements JsonDeserializer<Content> {
  @Override
  public Content deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) {
    // Get the "content" element from the parsed JSON
    JsonElement content = je.getAsJsonObject().get("content");

    // Deserialize it using a new Gson instance to avoid recursion
    return new Gson().fromJson(content, Content.class);
  }
}
Nach dem Login kopieren
  1. Registrieren Sie den Deserializer: Konfigurieren Sie Gson mit Ihrem benutzerdefinierten Deserializer:
Gson gson = new GsonBuilder()
  .registerTypeAdapter(Content.class, new MyDeserializer())
  .create();
Nach dem Login kopieren
  1. Retrofit mit benutzerdefiniertem Konverter verwenden: Erstellen Sie eine Retrofit-Instanz mit dem geänderten Gson:
Retrofit retrofit = new Retrofit.Builder()
  .baseUrl(url)
  .addConverterFactory(GsonConverterFactory.create(gson))
  .build();
Nach dem Login kopieren

Jetzt können Sie Ihre API-Antworten deserialisieren und mit Retrofit direkt als Inhaltsobjekte auf den verschachtelten Inhalt zugreifen.

Generischer Deserialisierer für mehrere Typen

Wenn Sie über mehrere Nachrichtentypen verfügen, die sich ein „Inhalt“-Feld teilen, können Sie einen generischen Deserialisierer erstellen folgt:

class MyDeserializer<T> implements JsonDeserializer<T> {
  @Override
  public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) {
    // Get the "content" element from the parsed JSON
    JsonElement content = je.getAsJsonObject().get("content");

    // Deserialize it using a new Gson instance to prevent recursion
    return new Gson().fromJson(content, type);
  }
}
Nach dem Login kopieren

Registrieren Sie diesen Deserialisierer für jeden Ihrer Inhaltstypen. Retrofit verwendet automatisch den entsprechenden Deserialisierer basierend auf der Art der API-Antwort.

Das obige ist der detaillierte Inhalt vonWie extrahiere ich verschachtelte JSON-Objekte aus API-Antworten mit Gson und Retrofit?. 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