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!