Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahkod JSON dengan Struktur Bersarang Dinamik di Golang?

Bagaimana untuk Menyahkod JSON dengan Struktur Bersarang Dinamik di Golang?

DDD
DDDasal
2024-11-17 08:46:03560semak imbas

How to Decode JSON with Dynamic Nested Structures in Golang?

JSON Nested Dynamic Structures Go Decoding

Pertemuan sering timbul apabila bekerja dengan data JSON yang mengandungi nama medan dinamik atau tidak diketahui dalam struktur bersarang. Ini boleh menimbulkan cabaran apabila cuba menyahsiri dan memproses data dengan tepat.

Contoh Data

Pertimbangkan data JSON berikut yang diterima selepas permintaan pelayan:

{
    "status": "OK",
    "status_code": 100,
    "sms": {
        "79607891234": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        },
        "79035671233": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        },
        "79105432212": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        }
    },
    "balance": 2676.18
}

Takrif Jenis Tersuai

Untuk mengendalikan struktur dinamik ini, takrifan jenis tersuai boleh digunakan:

type SMSPhone struct {
    Status     string `json:"status"`
    StatusCode int    `json:"status_code"`
    StatusText string `json:"status_text"`
}

type SMSSendJSON struct {
    Status     string     `json:"status"`
    StatusCode int        `json:"status_code"`
    Sms        []SMSPhone `json:"sms"`
    Balance    float64    `json:"balance"`
}

Menggunakan Peta

Memandangkan objek sms dalam JSON mempunyai kekunci dinamik, ia boleh dimodelkan menggunakan peta dengan nombor telefon sebagai kunci dan struct SMSPhone sebagai nilai:

type SMSPhone struct {
    Status     string `json:"status"`
    StatusCode int    `json:"status_code"`
    StatusText string `json:"status_text"`
}

type SMSSendJSON struct {
    Status     string              `json:"status"`
    StatusCode int                 `json:"status_code"`
    Sms        map[string]SMSPhone `json:"sms"`
    Balance    float64             `json:"balance"`
}

Unmarshaling

Dengan jenis tersuai yang ditakrifkan, data boleh dinyahmarshaling seperti berikut:

var result SMSSendJSON

if err := json.Unmarshal([]byte(src), &result); err != nil {
    panic(err)
}
fmt.Printf("%+v", result)

Ini akan menghasilkan objek desiri dengan betul dengan nombor telefon dinamik sebagai kunci dalam result.Sms map.

Soalan Berkaitan

  • Cara menghuraikan/menyahserialisasikan JSON dinamik di Golang
  • Cara unmarshal JSON dengan tidak diketahui nama medan untuk struct dalam golang?
  • Unmarshal JSON dengan medan yang tidak diketahui
  • Unmarshal json string kepada struct yang mempunyai satu elemen struct itu sendiri

Atas ialah kandungan terperinci Bagaimana untuk Menyahkod JSON dengan Struktur Bersarang Dinamik di Golang?. 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