Schreiben eines benutzerdefinierten JSON-Deserialisierers für Gson
Beim Umgang mit JSON-Objekten ist deren Deserialisierung in benutzerdefinierte Java-Klassen eine wesentliche Aufgabe. Mit Gson, einem beliebten JSON-Parser, können Sie benutzerdefinierte Deserialisierer erstellen, um bestimmte Szenarien zu bewältigen.
In diesem Leitfaden erfahren Sie, wie Sie einen benutzerdefinierten JSON-Deserialisierer für Gson schreiben, und zwar anhand eines Szenarios, in dem wir ein Java haben Klasse Benutzer, die Benutzerinformationen und eine JSON-Liste von Benutzern darstellt.
Die Problem
Sie haben eine JSON-Liste von Benutzerobjekten, die in die Benutzerklasse deserialisiert werden müssen. Ihr benutzerdefinierter Deserializer funktioniert jedoch nicht ordnungsgemäß.
Die Lösung
Um einen benutzerdefinierten JSON-Deserializer für Gson zu schreiben, können Sie die JsonDeserializer-Schnittstelle implementieren und eine Deserialisierungsmethode bereitstellen . Diese Methode verwendet das JSON-Element, den Typ, in den es deserialisieren soll, und einen JSON-Deserialisierungskontext als Argumente.
Betrachten Sie beispielsweise den folgenden angepassten Code:
@Override public User deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { int id = json.getAsJsonObject().get("id").getAsInt(); String name = json.getAsJsonObject().get("name").getAsString(); Timestamp updateDate = context.deserialize(json.getAsJsonObject().get("update_date"), Timestamp.class); return new User(id, name, updateDate); }
Zusätzlich Überlegungen
Sie können auch einen anderen Ansatz verwenden, um das manuelle Parsen in Ihrem Code zu minimieren, wie gezeigt unten:
public static void main(String[] args) { GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES); gsonBuilder.registerTypeAdapter(Timestamp.class, new TimestampDeserializer()); Gson gson = gsonBuilder.create(); User[] users = gson.fromJson(jsonInput, User[].class); } class TimestampDeserializer implements JsonDeserializer<Timestamp> { @Override public Timestamp deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { long time = Long.parseLong(json.getAsString()); return new Timestamp(time); } }
Dieser Ansatz verwendet einen TimestampDeserializer, um die Deserialisierung von Timestamp-Objekten zu handhaben, wodurch die manuelle Analyse in der Deserialisierungsmethode minimiert wird.
Das obige ist der detaillierte Inhalt vonWie schreibe ich einen benutzerdefinierten JSON-Deserializer in Gson für eine effiziente Datenanalyse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!