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
Linda Hamiltonasal
2024-12-08 22:30:12153semak imbas

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
}

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)

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

body = convert(body)

Akhir sekali, badan yang ditukarkan disusun menjadi rentetan JSON:

b, _ := json.Marshal(body)

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

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!

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