Décoder les structures JSON dynamiques imbriquées dans Go
Dans Go, désérialiser des données JSON avec des structures dynamiques imbriquées peut s'avérer difficile. Une requête récente illustre cette problématique :
{ "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 }
Pour désérialiser de telles données, nous devons utiliser une carte pour modéliser la liste dynamique des statuts SMS. Voici le code modifié :
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, démarshaler les données JSON avec cette structure modifiée :
var result SMSSendJSON if err := json.Unmarshal([]byte(src), &result); err != nil { panic(err) } fmt.Printf("%+v", result)
Désérialisera correctement les structures dynamiques imbriquées, ce qui donnera :
{Status:OK StatusCode:100 Sms:map[79035671233:{Status:ERROR StatusCode:203 StatusText:Нет текста сообщения} 79105432212:{Status:ERROR StatusCode:203 StatusText:Нет текста сообщения} 79607891234:{Status:ERROR StatusCode:203 StatusText:Нет текста сообщения}] Balance:2676.18}
Les clés de la carte result.Sms correspondent aux numéros de téléphone dynamiques, et leurs valeurs sont les SMS respectifs statuts.
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!