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!