Sérialiser un tableau JSON de type mixte dans Go
Dans Go, sérialiser un tableau JSON de type mixte, contenant des chaînes, des flottants et des caractères Unicode , peut poser un défi. Alors que Python autorise des tableaux de types mixtes, Go ne dispose pas de cette fonctionnalité.
Sérialisation avec MarshalJSON
Pour personnaliser la sérialisation, Go propose l'interface json.Marshaler. En implémentant cette interface, nous pouvons spécifier comment notre structure, Row, doit être codée. Dans ce cas, nous voulons l'encoder sous la forme d'un tableau de valeurs hétérogènes.
type Row struct { Ooid string Score float64 Text string } func (r *Row) MarshalJSON() ([]byte, error) { arr := []interface{}{r.Ooid, r.Score, r.Text} return json.Marshal(arr) }
MarshalJSON prend une tranche intermédiaire d'interface{} pour encoder les valeurs mixtes et renvoie les octets JSON encodés.
Désérialisation avec UnmarshalJSON
Pour désérialiser depuis JSON octets aux structures, Go fournit l'interface json.Unmarshaler.
func (r *Row) UnmarshalJSON(bs []byte) error { arr := []interface{}{} json.Unmarshal(bs, &arr) // TODO: add error handling here. r.Ooid = arr[0].(string) r.Score = arr[1].(float64) r.Text = arr[2].(string) return nil }
UnmarshalJSON utilise une tranche intermédiaire similaire d'interface{} pour décoder les valeurs JSON et remplir la structure Row.
Par en implémentant ces interfaces, nous prenons le contrôle du processus de sérialisation et de désérialisation, ce qui nous permet de travailler avec des tableaux de types mixtes dans Go.
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!