Gestion du décodage JSON partiel et des mises à jour dans Go
Dans les cas où la structure d'un objet JSON est dynamique, la désorganisation JSON traditionnelle peut conduire à perte de données due à la troncature des champs. Pour résoudre ce problème, envisagez une solution combinant une structure régulière avec json.RawMessage, qui permet des mises à jour sélectives tout en préservant les informations inconnues.
La structure Color illustre cette approche :
type Color struct { Space string raw map[string]json.RawMessage }
Pendant JSON lors du démarshalling, la méthode UnmarshalJSON lit toutes les données au format brut et récupère le champ souhaité (par exemple, Espace) à partir du format brut s'il est existe :
func (c *Color) UnmarshalJSON(bytes []byte) error { if err := json.Unmarshal(bytes, &c.raw); err != nil { return err } // ... return nil }
Pour le marshalling JSON, la méthode MarshalJSON remet le champ souhaité en brut, garantissant que le champ mis à jour est inclus dans la sortie :
func (c *Color) MarshalJSON() ([]byte, error) { // ... return json.Marshal(c.raw) }
Cette approche permet mises à jour sélectives des champs tout en préservant le reste des données JSON, y compris les structures inconnues ou dynamiques.
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!