Maison  >  Article  >  développement back-end  >  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
Linda Hamiltonoriginal
2024-10-26 23:55:30252parcourir

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>

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>

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!

Déclaration:
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