Maison > développement back-end > Golang > Comment convertir une chaîne YAML dynamique en JSON dans Go ?

Comment convertir une chaîne YAML dynamique en JSON dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-10 04:11:20
original
783 Les gens l'ont consulté

How to Convert a Dynamic YAML String to JSON in Go?

Conversion de YAML en JSON sans structures de données prédéfinies

Question :

Comment convertir une chaîne YAML avec une structure dynamique en chaîne JSON ? Le démarshalage dans une interface{} entraîne un type de données non pris en charge (map[interface {}]interface {}).

Réponse :

Le défi réside dans l'imprévu profondeur des cartes et des tranches imbriquées lors de la désorganisation de YAML dans une interface générique {}. Voici une approche pour les convertir de manière récursive en map[string]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 d'utilisation :

var body interface{}
if err := yaml.Unmarshal([]byte(s), &body); err != nil {
    panic(err)
}

body = convert(body)

if b, err := json.Marshal(body); err != nil {
    panic(err)
} else {
    fmt.Printf("Output: %s\n", b)
}
Copier après la connexion

Sortie :

{"Services":[{"Orders":[
    {"ID":"$save ID1","SupplierOrderCode":"$SupplierOrderCode"},
    {"ID":"$save ID2","SupplierOrderCode":111111}]}]}
Copier après la connexion

Remarque : Ce processus de conversion peut entraîner une perte de l'ordre des éléments, car les cartes Go le sont non commandé.

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