Lors du traitement des données JSON dans Go, le marshalling est souvent préféré à la construction manuelle de chaînes JSON. Cela est vrai pour le format Terraform JSON utilisé pour exprimer les configurations d'infrastructure. Cependant, un défi courant se pose lorsque l'on rencontre des clés JSON dynamiques, telles que le nom aléatoire « web1 » dans l'exemple fourni.
La question posée est : comment gérer de telles clés JSON dynamiques à l'aide des balises de champ de Go (par exemple, json : "aws_instance") ?
Malheureusement, les balises de champ de Go ne prennent pas directement en charge les clés dynamiques. La solution fournie tente d'utiliser des balises de champ pour représenter les clés statiques (« ressource » et « aws_instance »), mais ne parvient pas à traiter la clé dynamique « web1 ».
En tant que alternative, la réponse propose d'utiliser une carte pour représenter les clés dynamiques, permettant d'attribuer des valeurs au moment de l'exécution.
type Resource struct { AWSInstance map[string]AWSInstance `json:"aws_instance"` } type AWSInstance struct { AMI string `json:"ami"` Count int `json:"count"` SourceDestCheck bool `json:"source_dest_check"` }
Dans cet exemple, AWSInstance devient une carte saisie par des noms dynamiques (par exemple, "web1"). La carte peut ensuite être remplie avec des valeurs spécifiques selon les besoins.
r := Resource{ AWSInstance: map[string]AWSInstance{ "web1": AWSInstance{ AMI: "qdx", Count: 2, }, }, }
En utilisant une carte, les clés JSON dynamiques peuvent être facilement gérées dans Go, permettant d'utiliser efficacement le marshalling dans des scénarios où les balises de champ sont insuffisantes.
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!