Maison > développement back-end > Golang > Comment puis-je gérer le démarshaling JSON avec des types de données variables (objets ou chaînes) dans Go ?

Comment puis-je gérer le démarshaling JSON avec des types de données variables (objets ou chaînes) dans Go ?

Barbara Streisand
Libérer: 2024-12-03 00:51:15
original
215 Les gens l'ont consulté

How Can I Handle JSON Unmarshaling with Variable Data Types (Objects or Strings) in Go?

Gestion du démarshaling JSON avec des tableaux d'objets ou des chaînes dans Go

Lors du démarshaling JSON en structures dans Go, vous pouvez rencontrer des champs qui peuvent contenir différents types (objets ou chaînes) d’une requête à l’autre. Par exemple, un champ nommé "mykey" peut parfois contenir des objets en ligne et d'autres fois contenir des références à des objets situés sur des chemins spécifiques.

Solution Go-Idiomatic

Un Go idiomatique L'approche pour gérer cette situation consiste à définir une structure avec un champ dont le type est une tranche de valeurs d'interface {}. Cela permet au champ de contenir à la fois des objets et des chaînes, car Go les décodera automatiquement dans le type approprié en fonction du JSON entrant. Le code suivant le démontre :

type Data struct {
    MyKey []interface{} `json:"mykey"`
}
Copier après la connexion

Vérification de type

Après avoir désorganisé le JSON, vous pouvez utiliser un commutateur de type pour faire la distinction entre les objets et les chaînes dans la tranche :

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

Cela vous permet de gérer les deux types de valeurs de manière structurée et efficace manière.

Exemple

Considérez le JSON suivant :

{
  "mykey": [
    {obj1}, 
    {obj2}
  ]
}
Copier après la connexion

Après avoir désorganisé ce JSON dans une structure Data, la tranche MyKey contiendra deux éléments, chacun de type map[string]interface{}.

Alternativement, si le JSON contenait des références aux objets :

{
  "mykey": [
    "/obj1/is/at/this/path", 
    "/obj2/is/at/this/other/path"
  ]
}
Copier après la connexion

La tranche MyKey contiendra deux éléments, chacun de type chaîne.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal