Maison > développement back-end > Golang > Comment convertir YAML en JSON avec des structures de données dynamiques dans Go ?

Comment convertir YAML en JSON avec des structures de données dynamiques dans Go ?

Linda Hamilton
Libérer: 2024-12-08 22:30:12
original
194 Les gens l'ont consulté

How to Convert YAML to JSON with Dynamic Data Structures in 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
}
Copier après la connexion

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)
Copier après la connexion

La fonction convert() est ensuite appliquée à la variable body , convertissant toutes les cartes dynamiques en map[string]interface{} :

body = convert(body)
Copier après la connexion

Enfin, le corps converti est marshalé en un JSON string :

b, _ := json.Marshal(body)
Copier après la connexion

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}]}]}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal