Maison >développement back-end >Golang >Comment puis-je décoder des tableaux JSON avec des types de données mixtes dans Go ?

Comment puis-je décoder des tableaux JSON avec des types de données mixtes dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-26 10:06:10791parcourir

How Can I Decode JSON Arrays with Mixed Data Types in Go?

Décodage de tableaux avec des types mixtes en JSON

Lorsque vous traitez des tableaux JSON contenant des valeurs de types différents, il est essentiel de réfléchir à la manière de les désorganiser. dans un programme Go de manière efficace. Les tableaux Go nécessitent un type explicitement défini, ce qui pose un défi lors de la gestion de différents types de valeurs.

Solution : Utiliser l'interface{}

La solution réside dans l'utilisation de l'interface{} , un type spécial dans Go qui peut contenir des valeurs de n'importe quel type. En utilisant un tableau interface{}, nous permettons la flexibilité de stocker des valeurs de différents types dans le même tableau.

Exemple de mise en œuvre

Considérez l'exemple JSON suivant :

{"key": ["NewYork", 123]}

Pour désorganiser ce JSON à l'aide de l'interface{}, nous pouvons définir un fichier de données personnalisé structure :

type UntypedJson map[string][]interface{}

Ce type représente une carte des chaînes aux tableaux d'interface{}, permettant la possibilité de stocker des valeurs de tout type.

Démarshalisation du JSON

Pour démarshaler le JSON, nous pouvons utiliser le json.Unmarshal function :

var ut UntypedJson
json.Unmarshal([]byte(jsonString), &ut)

La variable ut contiendra désormais les données non marshalées en tant que type UntypedJson. Les clés de la carte correspondent aux clés de l'objet JSON et les valeurs du tableau contiennent les valeurs de différents types.

Exemple Playground

Un exemple complet avec un terrain de jeu Go intégré peut à retrouver ici :

const j = `{"NYC": ["NewYork",123]}`

type UntypedJson map[string][]interface{}

func main() {
    ut := UntypedJson{}
    fmt.Println(json.Unmarshal([]byte(j), &ut))
    fmt.Printf("%#v", ut)
}

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