Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menukar YAML kepada JSON secara Dinamik dalam Go tanpa Struktur Pratakrif?

Bagaimana untuk Menukar YAML kepada JSON secara Dinamik dalam Go tanpa Struktur Pratakrif?

Patricia Arquette
Lepaskan: 2024-11-28 14:57:14
asal
513 orang telah melayarinya

How to Dynamically Convert YAML to JSON in Go without Predefined Structs?

Tukar YAML kepada JSON Secara Dinamik tanpa Struktur Tertakrif

Anda mempunyai rentetan konfigurasi YAML dinamik yang anda mahu tukar kepada JSON. Walau bagaimanapun, anda tidak boleh mentakrifkan struct untuk JSON kerana struktur data tidak diketahui.

Untuk mengatasi cabaran ini, anda boleh menggunakan fungsi yaml.Unmarshal() untuk menghuraikan YAML ke dalam nilai antara muka{}. Ini akan menghasilkan struktur data bersarang peta dan kepingan dengan jenis antara muka lalai{}.

Masalah timbul apabila anda cuba menukar nilai antara muka{} ini kembali kepada JSON menggunakan json.Marshal(). Ia akan gagal kerana json.Marshal() tidak menyokong jenis peta[antara muka{}]antara muka{}.

Untuk mengendalikan struktur data dinamik ini, anda perlu menukar antara muka peta[antara muka{}] secara rekursif nilai {} untuk memetakan nilai [rentetan]antara muka{}. Ini memastikan bahawa semua peta mempunyai kunci rentetan, yang disokong oleh JSON.

Berikut ialah contoh fungsi penukar:

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

Menggunakan fungsi ini, anda boleh menukar nilai antara muka{} kepada Struktur data serasi JSON:

body = convert(body)
Salin selepas log masuk

Kini, anda boleh menggunakan json.Marshal() untuk menukar ditukarkan badan kepada rentetan JSON.

Berikut ialah contoh lengkap:

func main() {
    const s = `Services:
-   Orders:
    -   ID: $save ID1
        SupplierOrderCode: $SupplierOrderCode
    -   ID: $save ID2
        SupplierOrderCode: 111111
`
    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:

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

Perhatikan bahawa susunan elemen dalam output JSON mungkin berbeza daripada YAML asal kerana sifat peta Go yang tidak teratur.

Atas ialah kandungan terperinci Bagaimana untuk Menukar YAML kepada JSON secara Dinamik dalam Go tanpa Struktur Pratakrif?. 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