Maison > développement back-end > Golang > Comment puis-je gérer divers formats JSON lors du déclassement dans Go ?

Comment puis-je gérer divers formats JSON lors du déclassement dans Go ?

Linda Hamilton
Libérer: 2024-10-26 23:55:30
original
360 Les gens l'ont consulté

How Can I Handle Diverse JSON Formats When Unmarshalling in Go?

Adapter Unmarshal pour gérer divers formats JSON

Lors de l'accès aux API externes, les développeurs rencontrent souvent différents formats de réponse JSON, ce qui présente des défis lors de la désorganisation des données dans une structure cohérente. Dans Go, il est possible de gérer ces différences avec quelques techniques.

Prenons l'exemple d'un point de terminaison d'API qui renvoie des messages JSON dans deux formats, soit sous la forme d'une chaîne "message" ou d'un tableau de codes d'erreur [ "ERROR_CODE"]. Pour gérer cette variation, une structure personnalisée peut être définie pour contenir la réponse :

<code class="go">type Response struct {
    Message interface{} `json:"message"`
}</code>
Copier après la connexion

En définissant le champ Message comme type d'interface, le système de typage dynamique de Go permet le stockage de divers types de données. Cette flexibilité offre un point de départ pour gérer les différents formats de réponse.

Pour désorganiser le JSON dans la structure Response, un appel à json.Unmarshal serait utilisé. Cependant, étant donné que le champ Message peut contenir différents types, un cas particulier se présente lorsque le JSON représente un tableau (la réponse d'erreur). Par défaut, les tableaux JSON ne sont pas marshalés en valeurs de type []interface{}.

La clé pour gérer cette distinction réside dans l'examen du type du champ Message non marshalé. Ceci peut être réalisé avec une assertion de type ou un commutateur de type, comme illustré ci-dessous :

<code class="go">    switch x := r.Message.(type) {
    case string:
        fmt.Println("Success, message:", x)
    case []interface{}:
        fmt.Println("Error, code:", x)
    default:
        fmt.Println("Something else:", x)
    }</code>
Copier après la connexion

Dans cet extrait, le type de r.Message est examiné. S'il s'agit d'une chaîne, cela indique un message de réussite. S'il s'agit d'une tranche d'interfaces, cela représente une réponse d'erreur avec le code d'erreur. Sinon, cela est considéré comme une réponse inattendue.

En utilisant cette technique, les développeurs peuvent regrouper efficacement les réponses JSON avec différents formats dans une structure unifiée, permettant un traitement ultérieur et une prise de décision en fonction du type de message.

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