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
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!