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!