Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Unmarshal Nested JSON dengan Elemen Struktur Serupa dalam Go?

Bagaimana untuk Unmarshal Nested JSON dengan Elemen Struktur Serupa dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-13 06:49:13454semak imbas

How to Unmarshal Nested JSON with Structurally Similar Elements in Go?

Merungkai JSON dengan Nesting dan Kesamaan Struktur

Apabila berurusan dengan struktur JSON yang kompleks, adalah perkara biasa untuk menghadapi senario di mana satu elemen struktur adalah daripada jenis yang sama dengan struct itu sendiri. Ini boleh menimbulkan cabaran semasa proses unmarshalling.

Dalam kes khusus ini, kami diberikan rentetan JSON yang mewakili tatasusunan konfigurasi pangkalan data. Setiap konfigurasi pangkalan data mengandungi pelbagai atribut, termasuk senarai replika. Setiap replika juga merupakan objek JSON dengan atribut yang serupa dengan konfigurasi pangkalan data.

Untuk menyahmarshal rentetan JSON ini, kami memerlukan struktur data yang boleh menampung persamaan bersarang dan struktur.

Memodelkan Struktur Bersarang dengan Jenis Dinamik

Memandangkan input JSON ialah bukan sekeping struct DBS, kami memerlukan jenis data yang lebih fleksibel untuk menangkap strukturnya. Antara muka[rentetan]peta{} ialah pilihan yang sangat baik kerana ia boleh mewakili pasangan nilai kunci dengan nilai dinamik.

Contoh:

type DBS struct {
    URL      string
    Port     string
    Uname    string
    Pass     string
    Authdb   string
    Replicas []DBS
}

func main() {
    raw, err := ioutil.ReadFile("./config.json")
    if err != nil {
        fmt.Println(err.Error())
        os.Exit(1)
    }

    var config []map[string]interface{}
    json.Unmarshal(raw, &config)

    for _, db := range config {
        d, ok := db["db"]
        if !ok {
            // Handle the case where "db" is missing
        }

        db := d.(map[string]interface{})
        url := db["url"].(string)
        port := db["port"].(string)

        var replicas []DBS
        for _, replica := range db["replicas"] {
            replicas = append(replicas, mapToDBS(replica))
        }

        // ... Other operations
    }
}

Menggunakan Jenis Dinamik untuk Menghuraikan JSON

Dalam contoh ini, Pembolehubah konfigurasi ialah sekeping peta, yang membolehkannya menyimpan konfigurasi pangkalan data sebagai pasangan nilai kunci.

Untuk setiap konfigurasi pangkalan data, kami mendapatkan "db" sub-objek dan hantar ke peta[rentetan]antara muka{}. Ini membolehkan kami mengakses atribut individu seperti "url" dan "port".

Atribut "replika" dikendalikan dengan cara yang sama . Setiap replika ialah objek JSON, jadi ia boleh ditukar menjadi struct DBS menggunakan fungsi mapToDBS().

Dengan memanfaatkan fleksibiliti jenis dinamik, kami boleh membongkar rentetan JSON dengan berkesan dan menghuraikan struktur bersarangnya.

Atas ialah kandungan terperinci Bagaimana untuk Unmarshal Nested JSON dengan Elemen Struktur Serupa 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