Maison > développement back-end > Golang > le corps du texte

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

DDD
Libérer: 2024-10-26 12:30:03
original
198 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!