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

Bagaimana untuk Menukar YAML kepada JSON dengan Struktur Data Dinamik dalam Go?

Linda Hamilton
Lepaskan: 2024-12-08 22:30:12
asal
201 orang telah melayarinya

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

Menukar YAML kepada JSON Tanpa Struktur Eksplisit

Satu cabaran dalam menukar YAML kepada JSON timbul apabila struktur data dinamik, menjadikannya tidak sesuai untuk pemetaan kepada struct yang telah ditetapkan. Ralat ini berlaku apabila cuba menyusun jenis antara muka{} yang mengandungi peta peta bentuk[muka{}]antara muka{}.

Untuk memintas isu ini, fungsi penukaran rekursif diperlukan untuk mengubah peta dinamik ini ke dalam rakan sejawat serasi JSON yang sepadan, peta[rentetan]antara muka{}. Selain itu, kepingan dalam struktur data juga harus dilalui dan ditukar.

Fungsi Penukaran Rekursif

Fungsi convert() berikut berfungsi untuk tujuan ini, menukarkan semua peta yang ditemui secara rekursif [antara muka{}]antara muka{} dan []antara muka{} values:

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

Dalam contoh yang disediakan, input data YAML mula-mula dinyahmasukkan ke dalam pembolehubah{} antara muka:

var body interface{}
err := yaml.Unmarshal([]byte(s), &body)
Salin selepas log masuk

Fungsi convert() kemudiannya digunakan pada pembolehubah badan, menukar semua peta dinamik kepada peta[rentetan]antara muka{}:

body = convert(body)
Salin selepas log masuk

Akhir sekali, badan yang ditukarkan disusun menjadi rentetan JSON:

b, _ := json.Marshal(body)
Salin selepas log masuk

Output

Rentetan JSON keluaran dengan tepat mewakili input data YAML, walaupun kekurangan pemetaan eksplisit ke structs:

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

Nota

Adalah penting untuk mengetahui bahawa susunan elemen dalam output JSON mungkin berbeza daripada yang dalam input YAML disebabkan oleh tidak tertib sifat peta Go. Dalam kes yang mengekalkan susunan elemen adalah penting, pertimbangkan untuk menggunakan struktur data tersusun seperti sekeping struct.

Atas ialah kandungan terperinci Bagaimana untuk Menukar YAML kepada JSON dengan Struktur Data Dinamik 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