Maison  >  Article  >  développement back-end  >  Comment gérer plusieurs formats JSON dans Go lors du démarshalage ?

Comment gérer plusieurs formats JSON dans Go lors du démarshalage ?

DDD
DDDoriginal
2024-10-26 12:30:03182parcourir

How Do You Handle Multiple JSON Formats in Go When Unmarshaling?

Gérer plusieurs formats JSON avec Unmarshaling dans Go

Lors de l'utilisation d'une API tierce qui renvoie JSON dans différents formats, cela peut être difficile pour gérer les différentes structures de Go. Un défi courant consiste à gérer des réponses pouvant contenir soit une chaîne, soit un tableau dans un champ « message ».

Une approche simple

Une approche de base impliquerait de créer des structures distinctes pour chaque format :

<code class="go">type ResponseWithString struct {
    Message string `json:"message"`
}

type ResponseWithArray struct {
    Message []string `json:"message"`
}</code>

Vous pouvez ensuite tenter de décoder le JSON dans les deux structures successivement. Si la première tentative (avec chaîne) échoue, vous essayez la deuxième tentative (avec tableau).

Une solution plus élégante

Une approche plus élégante consiste à utiliser le type interface{}, qui peut contenir n’importe quel type de valeur. En désorganisant le JSON dans une variable de type interface{}, vous pouvez vérifier dynamiquement son type et répondre en conséquence.

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

func main() {
    ...
    var r Response
    ...
    switch x := r.Message.(type) {
        case string:
            // Handle string message
        case []interface{}:
            // Handle array message
    }
}</code>

Notez que par défaut, les tableaux JSON ne sont pas marshallés dans []interface{}, vous peut utiliser des assertions de type pour faire la distinction entre une chaîne et un tableau.

Cette approche offre une plus grande flexibilité et une plus grande réutilisabilité du code, car vous pouvez gérer plusieurs formats JSON avec une seule structure.

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