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
Lepaskan: 2024-12-10 04:11:20
asal
783 orang telah melayarinya

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
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

Output:

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

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan