Lorsque vous travaillez avec des données dynamiques au format YAML, il est souvent nécessaire de les convertir en JSON pour un traitement ultérieur. Cependant, la désorganisation directe de YAML dans une interface vide{} peut entraîner des problèmes lors de la rencontre de types map[interface{}]interface{}, comme démontré dans le scénario donné.
Pour résoudre ce problème, une fonction récursive appelée convert() est utilisée. Cette fonction parcourt la valeur interface{} et effectue les conversions suivantes :
Ce faisant, la valeur générée peut être marshalée en toute sécurité dans un Chaîne JSON.
Voici un exemple d'utilisation de la fonction convert() :
import ( "fmt" "log" "github.com/go-yaml/yaml" "encoding/json" ) 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 } func main() { // Define the YAML string const s = `Services: - Orders: - ID: $save ID1 SupplierOrderCode: $SupplierOrderCode - ID: $save ID2 SupplierOrderCode: 111111 ` // Unmarshal the YAML string into an empty interface var body interface{} if err := yaml.Unmarshal([]byte(s), &body); err != nil { log.Fatal(err) } // Recursively convert the interface to a map[string]interface{} body = convert(body) // Marshal the converted interface into a JSON string if b, err := json.Marshal(body); err != nil { log.Fatal(err) } else { fmt.Println("Converted JSON:", string(b)) } }
La sortie du le programme est le converti JSON :
Converted JSON: {"Services":[{"Orders":[ {"ID":"$save ID1","SupplierOrderCode":"$SupplierOrderCode"}, {"ID":"$save ID2","SupplierOrderCode":111111}]}]}
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!