Konvertieren von YAML in JSON ohne explizite Strukturen
Eine Herausforderung bei der Konvertierung von YAML in JSON entsteht, wenn die Datenstruktur dynamisch ist und daher ungeeignet für Zuordnung zu einer vordefinierten Struktur. Dieser Fehler tritt auf, wenn versucht wird, einen Interface{}-Typ zu Marshallen, der Karten der Form „map[interface{}]interface{} enthält.
Um dieses Problem zu umgehen, ist eine rekursive Konvertierungsfunktion erforderlich, um diese dynamischen Karten zu transformieren in ihre entsprechenden JSON-kompatiblen Gegenstücke, map[string]interface{}. Darüber hinaus sollten auch Slices innerhalb der Datenstruktur durchlaufen und konvertiert werden.
Rekursive Konvertierungsfunktion
Die folgende Funktion „convert()“ dient diesem Zweck und konvertiert alle gefundenen Karten rekursiv [interface{}]interface{} und []interface{} Werte:
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 }
Beispielverwendung
Im bereitgestellten Beispiel werden die eingegebenen YAML-Daten zunächst in eine Interface{}-Variable entmarshallt:
var body interface{} err := yaml.Unmarshal([]byte(s), &body)
Die Funktion „convert()“ wird dann auf die Variable „body“ angewendet und konvertiert alle dynamischen Karten in map[string]interface{}:
body = convert(body)
Schließlich wird der konvertierte Text in einen JSON-String gemarshallt:
b, _ := json.Marshal(body)
Ausgabe
Die ausgegebene JSON-Zeichenfolge stellt die eingegebenen YAML-Daten genau dar, obwohl keine explizite Zuordnung zu ihnen vorhanden ist Strukturen:
{"Services":[{"Orders":[ {"ID":"$save ID1","SupplierOrderCode":"$SupplierOrderCode"}, {"ID":"$save ID2","SupplierOrderCode":111111}]}]}
Hinweis
Es ist wichtig zu beachten, dass die Reihenfolge der Elemente in der JSON-Ausgabe aufgrund der Unordnung von der im Eingabe-YAML abweichen kann Natur von Go-Karten. In Fällen, in denen die Beibehaltung der Elementreihenfolge von entscheidender Bedeutung ist, sollten Sie die Verwendung einer geordneten Datenstruktur in Betracht ziehen, z. B. eines Slice von Strukturen.
Das obige ist der detaillierte Inhalt vonWie konvertiert man YAML in JSON mit dynamischen Datenstrukturen in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!