Maison >développement back-end >Golang >Comment désérialiser JSON avec des noms dynamiques dans des structures imbriquées dans Go ?
Décodage des structures dynamiques imbriquées en JSON avec Go
Cet article aborde le défi de la désérialisation des données JSON qui comportent des noms dynamiques dans des structures imbriquées. Examinons le problème et proposons une solution.
Énoncé du problème
Considérez la réponse JSON suivante :
{ "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 }
struct :
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"` }
Le problème se pose en raison des numéros de téléphone dynamiques comme noms de propriété dans le "sms" objet.
Solution
Pour gérer cette situation, nous pouvons utiliser une carte pour représenter l'objet "sms" en JSON :
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"` }
Maintenant, le code de désérialisation ressemble à ceci :
var result SMSSendJSON if err := json.Unmarshal([]byte(src), &result); err != nil { panic(err) }
Cette approche nous permet de traiter correctement les structures dynamiques imbriquées dans Allez-y.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!