Heim > Backend-Entwicklung > Golang > Wie konvertiert man YAML in JSON mit dynamischen Datenstrukturen in Go?

Wie konvertiert man YAML in JSON mit dynamischen Datenstrukturen in Go?

Linda Hamilton
Freigeben: 2024-12-08 22:30:12
Original
201 Leute haben es durchsucht

How to Convert YAML to JSON with Dynamic Data Structures in Go?

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
}
Nach dem Login kopieren

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)
Nach dem Login kopieren

Die Funktion „convert()“ wird dann auf die Variable „body“ angewendet und konvertiert alle dynamischen Karten in map[string]interface{}:

body = convert(body)
Nach dem Login kopieren

Schließlich wird der konvertierte Text in einen JSON-String gemarshallt:

b, _ := json.Marshal(body)
Nach dem Login kopieren

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}]}]}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage