Maison >développement back-end >Golang >Comment désorganiser JSON avec différents formats de réponse dans Go ?

Comment désorganiser JSON avec différents formats de réponse dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 10:00:30839parcourir

How to Unmarshal JSON with Varying Response Formats in Go?

Désorganisation de JSON avec différents formats de réponse dans Go

Lors de la consommation de points de terminaison externes, vous pouvez rencontrer des réponses JSON avec différents formats. La gestion de ces variations peut être difficile, surtout lorsque vous souhaitez structurer votre réponse dans un type de données spécifique.

Le dilemme

Vous êtes confronté à un point de terminaison qui renvoie JSON. en deux formats :

  • Format 1 : { "message": "Message" }
  • Format 2 : { "message": ["ERROR_CODE"] }

Le défi est de créer une structure Go pouvant prendre en charge les deux formats de réponse.

Une approche simple

Au départ, vous avez envisagé d'utiliser deux structures distinctes, une pour chaque format. Cependant, cette approche n'est pas idéale car elle nécessite plusieurs tentatives de décodage et gestion des erreurs.

Une solution plus élégante

Une solution plus élégante consiste à désorganiser le JSON dans une interface {} taper. Interface{} est un type spécial dans Go qui peut contenir n'importe quelle valeur, quel que soit son type spécifique.

<code class="go">type Response struct {
    Message interface{} `json:"message"`
}</code>

Une fois désorganisé, vous pouvez utiliser une assertion de type ou un commutateur de type pour inspecter le type du champ Message. .

<code class="go">switch x := r.Message.(type) {
    case string:
        // Handle string message
    case []interface{}:
        // Handle array message
    default:
        // Handle unexpected type
}</code>

Cette approche vous permet de gérer les deux formats de réponse au sein d'une seule structure, offrant ainsi une solution plus robuste et plus maintenable.

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