Heim > Backend-Entwicklung > Golang > Wie konvertiert man YAML effizient in JSON mit dynamischen Daten und ohne Strukturen?

Wie konvertiert man YAML effizient in JSON mit dynamischen Daten und ohne Strukturen?

DDD
Freigeben: 2024-11-27 19:54:11
Original
718 Leute haben es durchsucht

How to Efficiently Convert YAML to JSON with Dynamic Data and No Structs?

YAML-zu-JSON-Konvertierung für dynamische Daten ohne Strukturen

Beim Umgang mit dynamischen Daten, die nicht einer Struktur zugeordnet werden können, Konvertierung von YAML in JSON kann Herausforderungen mit sich bringen. Betrachten Sie die folgende YAML-Zeichenfolge:

Services: 
-   Orders: 
    -   ID: $save ID1
        SupplierOrderCode: $SupplierOrderCode
    -   ID: $save ID2
        SupplierOrderCode: 111111
Nach dem Login kopieren

Um diese YAML-Zeichenfolge in JSON zu konvertieren, besteht ein Ansatz darin, sie in einen Interface{}-Typ zu entmarshalieren. Dies führt jedoch zu nicht unterstützten Typen, da der Standardtyp, der zum Entmarshalieren von Schlüssel-Wert-Paaren verwendet wird, „map[interface{}]interface{}“ ist.

Um dieses Problem zu lösen, müssen wir „map[interface{“ konvertieren. }]interface{}-Werte, um [string]interface{}-Werte rekursiv abzubilden. Hier ist eine Funktion, die diese Konvertierung durchführt:

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

Mit dieser Funktion können wir den YAML-String wie folgt in JSON konvertieren:

import (
    "encoding/json"
    "fmt"
    "github.com/go-yaml/yaml"
)

const s = `Services:
-   Orders:
    -   ID: $save ID1
        SupplierOrderCode: $SupplierOrderCode
    -   ID: $save ID2
        SupplierOrderCode: 111111
`

func main() {
    fmt.Printf("Input: %s\n", s)
    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)
    }
}
Nach dem Login kopieren

Ausgabe:

Input: Services:
-   Orders:
    -   ID: $save ID1
        SupplierOrderCode: $SupplierOrderCode
    -   ID: $save ID2
        SupplierOrderCode: 111111

Output: {"Services":[{"Orders":[
    {"ID":"$save ID1","SupplierOrderCode":"$SupplierOrderCode"},
    {"ID":"$save ID2","SupplierOrderCode":111111}]}]}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie konvertiert man YAML effizient in JSON mit dynamischen Daten und ohne Strukturen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage