Heim >Java >javaLernprogramm >Wie kann ich verschachtelte JSON-Daten mit Retrofit und Gson effizient extrahieren?
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 > }
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; }
Deserializer:
Implementieren Sie a JsonDeserializer
class MyDeserializer implements JsonDeserializer<Content> { @Override public Content deserialize(...) { JsonElement content = je.getAsJsonObject().get("content"); return new Gson().fromJson(content, Content.class); } }
Gson-Konfiguration:
Erstellen Sie eine Gson-Instanz mit GsonBuilder, Registrieren des benutzerdefinierten Deserialisierers:
Gson gson = new GsonBuilder() .registerTypeAdapter(Content.class, new MyDeserializer()) .create();
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); } }
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();
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!