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
Linda Hamiltonoriginal
2024-12-08 22:30:12153parcourir

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
}

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!

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