Maison >développement back-end >Golang >Comment désorganiser JSON avec des clés dynamiques dans des champs Struct dans Go ?

Comment désorganiser JSON avec des clés dynamiques dans des champs Struct dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-16 00:07:03598parcourir

How to Unmarshal JSON with Dynamic Keys into Struct Fields in Go?

Désorganisation des clés dynamiques dans des champs Struct dans Go

Lorsque vous travaillez avec des données JSON qui n'adhèrent pas à une structure prédéterminée, la désorganisation devient plus stimulant. Dans ce cas, vous disposez d'un fichier de configuration JSON avec des clés dynamiques dans un objet nommé « choses ».

Pour résoudre ce problème, une solution consiste à utiliser une carte dans votre structure pour capturer les clés dynamiques. Voici un exemple :

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}

Au lieu de définir un champ de structure spécifique pour chaque clé, le champ « Objets » est une carte qui stocke les paires clé-valeur, où la clé est la clé dynamique.

Pour désorganiser les données JSON en utilisant cette approche, vous feriez quelque chose comme :

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}

Cela désorganisera le JSON dans le Structure "X", avec les clés dynamiques mappées aux instances de structure appropriées dans la carte "Objets".

Cependant, si vous souhaitez toujours que la valeur de la clé soit un champ dans la structure plutôt qu'une partie de la structure map key, vous pouvez utiliser cette approche :

type Thing struct {
    Name string `json:"-"` // <-- add this field
    Key1 string
    Key2 string
}

...

// Update the name field after unmarshalling
for k, t := range x.Things {
    t.Name = k
    x.Things[k] = t
}

Cela implique d'ajouter une balise "-`json" au champ "Nom" pour l'ignorer lors du démarchage. Après le désorganisation, une boucle est utilisée pour attribuer les clés dynamiques au champ "Nom" de chaque instance de structure dans la carte.

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