Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menukar Rentetan YAML Dinamik kepada JSON dalam Go?

Bagaimana untuk Menukar Rentetan YAML Dinamik kepada JSON dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-10 04:11:20818semak imbas

How to Convert a Dynamic YAML String to JSON in Go?

Menukar YAML kepada JSON tanpa Struktur Data Pratakrif

Soalan:

Bagaimana anda menukar rentetan YAML dengan struktur dinamik ke dalam rentetan JSON? Menyahmarshaling ke dalam antara muka{} menghasilkan jenis data yang tidak disokong (peta[antara muka {}]antara muka {}).

Jawapan:

Cabaran terletak pada yang tidak dijangka kedalaman peta bersarang dan kepingan apabila menyahmarshaling YAML ke dalam antara muka generik{}. Berikut ialah pendekatan untuk menukarnya secara rekursif kepada[rentetan] antara muka{} dan []antara muka{}:

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
}

Contoh penggunaan:

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)
}

Output:

{"Services":[{"Orders":[
    {"ID":"$save ID1","SupplierOrderCode":"$SupplierOrderCode"},
    {"ID":"$save ID2","SupplierOrderCode":111111}]}]}

Nota: Proses penukaran ini mungkin mengakibatkan kehilangan susunan elemen, seperti yang dipetakan oleh Go tidak dipesan.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Rentetan YAML Dinamik kepada JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn