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
Mary-Kate Olsenoriginal
2024-12-10 04:11:20810parcourir

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
}

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)
}

Sortie :

{"Services":[{"Orders":[
    {"ID":"$save ID1","SupplierOrderCode":"$SupplierOrderCode"},
    {"ID":"$save ID2","SupplierOrderCode":111111}]}]}

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!

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