Maison > Java > javaDidacticiel > Comment puis-je personnaliser le convertisseur GSON de Retrofit pour extraire des objets JSON imbriqués ?

Comment puis-je personnaliser le convertisseur GSON de Retrofit pour extraire des objets JSON imbriqués ?

Mary-Kate Olsen
Libérer: 2024-11-24 17:25:12
original
717 Les gens l'ont consulté

How Can I Customize Retrofit's GSON Converter to Extract Nested JSON Objects?

Personnalisation du convertisseur GSON Retrofit pour récupérer des objets JSON imbriqués

Lors de la consommation d'API qui intègrent les données souhaitées dans des structures JSON imbriquées, en tirant parti de GSON avec Retrofit peut être un défi. Cette question explore une solution pour extraire l'objet de contenu spécifique d'une réponse API imbriquée.

La réponse JSON en question suit un modèle dans lequel les données dont vous avez besoin sont placées dans un champ « contenu ». Le but est de créer un convertisseur GSON qui récupère directement ce contenu, sans tenir compte des couches externes.

Solution : Créer un désérialiseur personnalisé

La solution s'articule autour de la création d'un désérialiseur personnalisé désérialiseur qui se concentre sur l’extraction de l’objet incorporé. Le désérialiseur remplace la méthode "deserialize" et effectue les étapes suivantes :

  1. Récupère l'élément "content" du JSON analysé.
  2. Utilise une nouvelle instance de Gson pour le désérialiser (empêchant récursion).
  3. Renvoie l'objet résultant, généralement les données souhaitées structure.

Enregistrement du désérialiseur et création de Gson

Pour rendre le désérialiseur personnalisé disponible pour Retrofit, il doit être enregistré à l'aide de GsonBuilder. Enregistrez une instance distincte pour chaque type que vous rencontrez avec du JSON imbriqué. L'instance Gson résultante peut ensuite être utilisée dans le client Retrofit.

Exemple de mise en œuvre

class MyDeserializer<T> implements JsonDeserializer<T> {
    @Override
    public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
        throws JsonParseException {
        JsonElement content = je.getAsJsonObject().get("content");
        return new Gson().fromJson(content, type);
    }
}

Gson gson = new GsonBuilder()
    .registerTypeAdapter(Content.class, new MyDeserializer<Content>())
    .registerTypeAdapter(DiffContent.class, new MyDeserializer<DiffContent>())
    .create();

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(url)
    .addConverterFactory(GsonConverterFactory.create(gson))
    .build();
Copier après la connexion

En adoptant cette approche, votre client Retrofit peut désérialiser de manière transparente les données souhaitées. objets, même lorsqu'ils sont profondément imbriqués dans la réponse de l'API.

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