Désérialisation JSON personnalisée avec Gson
En Java, Gson est une bibliothèque populaire pour l'analyse et la sérialisation JSON. Lorsque vous travaillez avec des structures JSON complexes, il peut être nécessaire de définir des désérialiseurs personnalisés pour gérer des formats de données spécifiques.
Considérez l'exemple suivant dans lequel vous avez une classe User et recevez une liste JSON contenant des objets utilisateur.
public class User { int id; String name; Timestamp updateDate; }
[{"id":1,"name":"Jonas","update_date":"1300962900226"}, {"id":5,"name":"Test","date_date":"1304782298024"}]
Pour définir un désérialiseur personnalisé, implémentez l'interface JsonDeserializer et fournissez une méthode de désérialisation. Cependant, le code fourni dans la question présente plusieurs problèmes :
Une approche plus appropriée consiste à tirer parti de la prise en charge intégrée de Gson pour les politiques de dénomination de champs et les désérialiseurs personnalisés. Cela réduit le besoin d'analyse manuelle et simplifie le processus de désérialisation :
GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES); gsonBuilder.registerTypeAdapter(Timestamp.class, new TimestampDeserializer());
Dans le désérialiseur personnalisé, la méthode deserialize analyse la valeur JSON sous forme de chaîne et crée un objet Timestamp :
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); } }
En enregistrant le désérialiseur personnalisé, Gson gérera automatiquement la désérialisation de update_date en tant qu'horodatage en utilisant la logique définie dans TimestampDeserializer.
Cette approche fournit une méthode plus concise et plus sujette aux erreurs pour la désérialisation JSON personnalisée avec Gson.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!