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
Lepaskan: 2024-11-17 08:46:03
asal
528 orang telah melayarinya

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
}
Salin selepas log masuk

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"`
}
Salin selepas log masuk

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"`
}
Salin selepas log masuk

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)
Salin selepas log masuk

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!

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