Extraction d'objets JSON imbriqués avec GSON dans Retrofit
Lors de l'utilisation d'une API qui répond avec des objets JSON contenant des données imbriquées, il peut devenir difficile de extraire et exploiter directement les données pertinentes. Cela est particulièrement vrai lorsque les données souhaitées sont enfouies dans un champ de « contenu » intermédiaire.
Pour surmonter cet obstacle, GSON fournit un mécanisme permettant de créer des désérialiseurs personnalisés, qui peuvent être utilisés pour extraire des champs spécifiques de la réponse JSON. .
Création d'un désérialiseur personnalisé
Pour créer un désérialiseur personnalisé, définissez une nouvelle classe implémentant l'interface JsonDeserializer, comme indiqué ci-dessous :
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); } }
Désérialiseur générique pour différents types de contenu
Si vous avez différents types de messages mais que tous partagent un "content", vous pouvez créer un désérialiseur générique :
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); } }
Enregistrement du Désérialiseur dans Retrofit
Une fois le désérialiseur créé, enregistrez-le auprès de GsonConverterFactory lors de la création d'une instance Retrofit :
Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
Exemple d'utilisation :
Avec le désérialiseur personnalisé en place, vous pouvez désormais désérialiser la réponse JSON directement dans le POJO souhaité :
Content c = gson.fromJson(myJson, Content.class);
En utilisant des désérialiseurs personnalisés, vous bénéficiez de la flexibilité nécessaire pour adapter le processus d'analyse JSON à vos besoins spécifiques, vous permettant d'accéder et de manipuler facilement les données imbriquées dans les réponses JSON.
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!