Heim > Java > javaLernprogramm > Hauptteil

Wie kann ich verschachtelte JSON-Daten mit Retrofit und Gson effizient extrahieren?

Barbara Streisand
Freigeben: 2024-11-19 17:36:03
Original
276 Leute haben es durchsucht

How Can I Efficiently Extract Nested JSON Data Using Retrofit and Gson?

Geschachteltes JSON-Objekt mit GSON mithilfe von Retrofit abrufen

Problemübersicht:

Beim Konsumieren eines API mit JSON-Antworten, strukturiert wie:

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

wo sich die gewünschten POJO-Daten befinden Im Feld „Inhalt“ verschachtelt, deserialisiert Retrofit standardmäßig die gesamte JSON-Antwort in ein POJO mit den Feldern „Status“ und „Grund“, jedoch nicht mit den eigentlichen Daten von Interesse.

Deserialisierung anpassen:

Um das verschachtelte Inhaltsfeld automatisch zu extrahieren, können Sie mit einen benutzerdefinierten Deserialisierer erstellen Gson:

Content POJO:

Definieren Sie eine POJO-Klasse, die die verschachtelten Daten darstellt, wie zum Beispiel:

class Content {
    public int foo;
    public String bar;
}
Nach dem Login kopieren

Deserializer:

Implementieren Sie a JsonDeserializer das das „content“-Element aus der JSON-Antwort extrahiert und es in das Content-POJO deserialisiert:

class MyDeserializer implements JsonDeserializer<Content> {
    @Override
    public Content deserialize(...) {
        JsonElement content = je.getAsJsonObject().get("content");
        return new Gson().fromJson(content, Content.class);
    }
}
Nach dem Login kopieren

Gson-Konfiguration:

Erstellen Sie eine Gson-Instanz mit GsonBuilder, Registrieren des benutzerdefinierten Deserialisierers:

Gson gson = new GsonBuilder()
    .registerTypeAdapter(Content.class, new MyDeserializer())
    .create();
Nach dem Login kopieren

Erweiterter Deserialisierer für mehrere Typen:

Wenn Sie mehrere Nachrichtentypen mit „Inhalt“-Feldern haben, können Sie den Deserialisierer wie folgt verallgemeinern:

class MyDeserializer<T> implements JsonDeserializer<T> {
    @Override
    public T deserialize(...) {
        JsonElement content = je.getAsJsonObject().get("content");
        return new Gson().fromJson(content, type);
    }
}
Nach dem Login kopieren

Registrieren Sie eine Instanz dieses Deserialisierers für jeden Ihrer Inhaltstypen.

Retrofit-Integration:

Bestehen Sie die angepasste Gson-Instanz an den Retrofit-Builder:

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

Mit diesem Setup extrahiert Retrofit nun automatisch das Feld „Inhalt“ und analysiert es in das entsprechende POJO, sodass keine manuelle Feldextraktion erforderlich ist.

Das obige ist der detaillierte Inhalt vonWie kann ich verschachtelte JSON-Daten mit Retrofit und Gson effizient extrahieren?. 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