Maison > Java > javaDidacticiel > Comment extraire des objets JSON imbriqués à partir de réponses de mise à niveau à l'aide de désérialiseurs GSON personnalisés ?

Comment extraire des objets JSON imbriqués à partir de réponses de mise à niveau à l'aide de désérialiseurs GSON personnalisés ?

Patricia Arquette
Libérer: 2024-11-23 06:40:25
original
846 Les gens l'ont consulté

How to Extract Nested JSON Objects from Retrofit Responses using Custom GSON Deserializers?

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);
    }
}
Copier après la connexion

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);
    }
}
Copier après la connexion

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();
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal