Maison >développement back-end >Golang >Comment gérer les clés JSON dynamiques lors du démarshalage dans Go ?

Comment gérer les clés JSON dynamiques lors du démarshalage dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-07 13:02:13777parcourir

How to Handle Dynamic JSON Keys During Unmarshaling in Go?

Gestion dynamique des clés dans le démarshaling JSON : GoLang

Dans GoLang, le démarshaling des données JSON dans une structure peut devenir difficile lorsque les clés du JSON sont dynamiques ou ne peuvent pas être directement mappés à un champ spécifique dans la structure. Cet article présente une solution à ce problème en introduisant l'utilisation d'une carte pour capturer les clés dynamiques et leurs valeurs associées.

Description du problème :

Considérez la structure suivante :

type X struct {
 A string `json:"a_known_string"`
 B string `json:"b_known_string"`
}

et une chaîne JSON :

"{
 "any string" : {
   "a_known_string" : "some value",
   "b_known_string" : "another value" 
 }
}"

Utilisation du JSON standard La fonction Unmarshal avec la structure ne capturerait pas la clé dynamique, "n'importe quelle chaîne".

Solution utilisant une carte :

Pour résoudre ce problème, nous pouvons utiliser une carte pour stocker les paires clé-valeur dynamiques. Voici un exemple :

var m map[string]X
err := json.Unmarshal([]byte(jsnStr), &m)

Dans cette solution, la variable m sera une carte où les clés sont les chaînes dynamiques et les valeurs sont des instances de la structure X.

Cette approche nous permet de capturer les clés dynamiques et leurs valeurs correspondantes tout en conservant une représentation structurée des données.

Aire de jeu Exemple :

L'exemple de terrain de jeu fourni démontre l'utilisation de la solution :

https://go.dev/play/p/tZ27zKhI9Ct

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