Les structures dynamiques imbriquées JSON vont au décodage
Des rencontres surviennent souvent lorsque vous travaillez avec des données JSON contenant des noms de champs dynamiques ou inconnus dans des structures imbriquées. Cela peut poser un défi lorsque l'on tente de désérialiser et de traiter les données avec précision.
Exemples de données
Considérez les données JSON suivantes reçues après une requête du serveur :
{ "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 }
Définitions de types personnalisés
Pour gérer cette structure dynamique, des définitions de types personnalisées peuvent être utilisées :
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"` }
Utilisation de Maps
Étant donné que l'objet sms dans le JSON a des clés dynamiques, il peut être modélisé à l'aide d'une carte avec les numéros de téléphone comme clés et la structure SMSPhone comme valeurs :
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"` }
Démarshaling
Avec les types personnalisés définis, les données peuvent être démarshalées comme suit :
var result SMSSendJSON if err := json.Unmarshal([]byte(src), &result); err != nil { panic(err) } fmt.Printf("%+v", result)
Cela se traduira par un objet correctement désérialisé avec les numéros de téléphone dynamiques comme clés dans le result.Sms map.
Questions connexes
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!