Maison >développement back-end >Golang >Comment convertir YAML en JSON avec des structures de données dynamiques dans Go ?
Conversion de YAML en JSON sans structures explicites
Un défi dans la conversion de YAML en JSON survient lorsque la structure des données est dynamique, ce qui la rend inadaptée à mappage à une structure prédéfinie. Cette erreur se produit lors de la tentative de marshalage d'un type interface{} contenant des cartes de la forme map[interface{}]interface{}.
Pour contourner ce problème, une fonction de conversion récursive est requise pour transformer ces cartes dynamiques. dans leurs homologues compatibles JSON correspondants, map[string]interface{}. De plus, les tranches de la structure de données doivent également être parcourues et converties.
Fonction de conversion récursive
La fonction convert() suivante sert à cet effet, convertissant de manière récursive toutes les cartes rencontrées. Valeurs [interface{}]interface{} et []interface{} :
func convert(i interface{}) interface{} { switch x := i.(type) { case map[interface{}]interface{}: m2 := map[string]interface{}{} for k, v := range x { m2[k.(string)] = convert(v) } return m2 case []interface{}: for i, v := range x { x[i] = convert(v) } } return i }
Exemple Utilisation
Dans l'exemple fourni, les données YAML d'entrée sont d'abord désorganisées dans une variable d'interface{} :
var body interface{} err := yaml.Unmarshal([]byte(s), &body)
La fonction convert() est ensuite appliquée à la variable body , convertissant toutes les cartes dynamiques en map[string]interface{} :
body = convert(body)
Enfin, le corps converti est marshalé en un JSON string :
b, _ := json.Marshal(body)
Sortie
La chaîne JSON de sortie représente avec précision les données YAML d'entrée, malgré l'absence de mappage explicite aux structures :
{"Services":[{"Orders":[ {"ID":"$save ID1","SupplierOrderCode":"$SupplierOrderCode"}, {"ID":"$save ID2","SupplierOrderCode":111111}]}]}
Remarque
Il est important d'être conscient que l'ordre des éléments dans le La sortie JSON peut différer de celle du YAML d'entrée en raison de la nature désordonnée des cartes Go. Dans les cas où la préservation de l'ordre des éléments est cruciale, envisagez d'utiliser une structure de données ordonnée telle qu'une tranche de structures.
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!