Heim >Backend-Entwicklung >Golang >Wie kann ich YAML in Go sicher in JSON konvertieren, ohne die Datenintegrität zu verlieren?
Bei der Arbeit mit dynamischen Daten im YAML-Format ist es oft notwendig, diese zur weiteren Verarbeitung in JSON zu konvertieren. Das direkte Unmarshalling von YAML in eine leere Schnittstelle{} kann jedoch zu Problemen führen, wenn auf Map[interface{}]interface{}-Typen gestoßen wird, wie im gegebenen Szenario gezeigt.
Um dieses Problem zu beheben, wird eine rekursive Funktion namens „convert()“ verwendet. Diese Funktion durchläuft den Wert der Schnittstelle{} und führt die folgenden Konvertierungen durch:
Auf diese Weise kann der ausgegebene Wert sicher sein in eine JSON-Zeichenfolge gemarshallt.
Hier ist ein Beispiel für die Verwendung der Funktion „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)) } }
Die Die Ausgabe des Programms ist die konvertierte JSON:
Converted JSON: {"Services":[{"Orders":[ {"ID":"$save ID1","SupplierOrderCode":"$SupplierOrderCode"}, {"ID":"$save ID2","SupplierOrderCode":111111}]}]}
Das obige ist der detaillierte Inhalt vonWie kann ich YAML in Go sicher in JSON konvertieren, ohne die Datenintegrität zu verlieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!