Maison  >  Article  >  développement back-end  >  Comment gérer différents types de valeurs JSON lors du démarshalage dans Go ?

Comment gérer différents types de valeurs JSON lors du démarshalage dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-18 21:07:03707parcourir

How to Handle Varying JSON Value Types When Unmarshaling in Go?

Démarshaling JSON avec différents types de valeurs dans Go

Dans Go, le démarshaling JSON implique généralement de mapper les données JSON à une structure correspondante. Cependant, des difficultés surviennent lorsque la structure des données peut varier, présentant la valeur d'une clé sous la forme d'un tableau d'objets ou de chaînes.

Problème :
Une API fournit des structures de données incohérentes, ce qui entraîne dans les variations de valeur potentielles pour une clé : objets en ligne ou références à des objets (/obj1/is/at/this/path).

Solution :
Pour gérer cette variabilité, envisagez les techniques suivantes :

1 . Annuler le marshal vers un type d'interface :
Désassembler les données JSON vers une structure contenant un champ de type []interface{}. Cela permettra à la fois aux chaînes (décodées en tant que chaînes) et aux objets (décodés en tant que map[string]interface{}) d'être stockés dans le tableau.

Exemple de code :

type Data struct {
    MyKey []interface{} `json:"mykey"`
}

2. Changement de type pour la différenciation :
Une fois les données non marshalées, utilisez un commutateur de type pour faire la distinction entre les chaînes et les objets.

Exemple de code :

for i, v := range data.MyKey {
    switch x := v.(type) {
    case string:
        fmt.Println("Got a string: ", x)
    case map[string]interface{}:
        fmt.Printf("Got an object: %#v\n", x)
    }
}

Remarques supplémentaires :

  • Vous pouvez poursuivre le traitement les objets selon les besoins en accédant à la structure map[string]interface{} sous-jacente.
  • Cette approche offre une flexibilité dans la gestion des modifications futures potentielles de la structure des données sans nécessiter de codage en dur ou de réflexion.

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