Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menukar YAML kepada JSON dengan Cekap dengan Data Dinamik dan Tiada Struktur?

Bagaimana untuk Menukar YAML kepada JSON dengan Cekap dengan Data Dinamik dan Tiada Struktur?

DDD
Lepaskan: 2024-11-27 19:54:11
asal
703 orang telah melayarinya

How to Efficiently Convert YAML to JSON with Dynamic Data and No Structs?

Penukaran YAML kepada JSON untuk Data Dinamik tanpa Struktur

Apabila berurusan dengan data dinamik yang tidak boleh dipetakan kepada struct, menukar YAML kepada JSON boleh menimbulkan cabaran. Pertimbangkan rentetan YAML berikut:

Services: 
-   Orders: 
    -   ID: $save ID1
        SupplierOrderCode: $SupplierOrderCode
    -   ID: $save ID2
        SupplierOrderCode: 111111
Salin selepas log masuk

Untuk menukar rentetan YAML ini kepada JSON, satu pendekatan ialah menyahmarshalkannya menjadi jenis antara muka{}. Walau bagaimanapun, ini menyebabkan jenis tidak disokong, kerana jenis lalai yang digunakan untuk menyahmarshal pasangan nilai kunci ialah map[antara muka{}]antara muka{}.

Untuk mengatasi isu ini, kita perlu menukar peta[antara muka{ }]nilai{} antara muka untuk memetakan nilai [rentetan]antara muka{} secara rekursif. Berikut ialah fungsi yang melakukan penukaran ini:

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, kita boleh menukar rentetan YAML kepada JSON seperti berikut:

import (
    "encoding/json"
    "fmt"
    "github.com/go-yaml/yaml"
)

const s = `Services:
-   Orders:
    -   ID: $save ID1
        SupplierOrderCode: $SupplierOrderCode
    -   ID: $save ID2
        SupplierOrderCode: 111111
`

func main() {
    fmt.Printf("Input: %s\n", s)
    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:

Input: Services:
-   Orders:
    -   ID: $save ID1
        SupplierOrderCode: $SupplierOrderCode
    -   ID: $save ID2
        SupplierOrderCode: 111111

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

Atas ialah kandungan terperinci Bagaimana untuk Menukar YAML kepada JSON dengan Cekap dengan Data Dinamik dan Tiada Struktur?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan