Maison >développement back-end >Golang >Comment puis-je rassembler des clés JSON dynamiques dans Go à l'aide de balises de champ ?

Comment puis-je rassembler des clés JSON dynamiques dans Go à l'aide de balises de champ ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-11 07:24:09265parcourir

How Can I Marshal Dynamic JSON Keys in Go Using Field Tags?

Marshaler les balises de champ JSON dynamiques dans Go : surmonter les défis

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") ?

Limitations du champ Balises

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 ».

Approches alternatives

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!

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