Sérialiser un tableau JSON de type mixte dans Go
Dans Go, sérialiser un tableau hétérogène de chaînes, de nombres à virgule flottante et de caractères Unicode dans un tableau JSON peut sembler difficile en raison du manque de prise en charge intégrée des tableaux de types mixtes. Cependant, en implémentant l'interface json.Marshaler, nous pouvons personnaliser la façon dont les objets sont sérialisés pour y parvenir.
Implémentation de la méthode MarshalJSON
Pour sérialiser une structure comme Row comme un tableau de tableaux, nous créons une méthode MarshalJSON sur le type Row. Cette méthode convertit la structure Row en un tableau de valeurs d'interface génériques, puis les sérialise à l'aide de json.Marshal :
func (r *Row) MarshalJSON() ([]byte, error) { arr := []interface{}{r.Ooid, r.Score, r.Text} return json.Marshal(arr) }
Exemple d'utilisation
Avec la méthode MarshalJSON dans place, nous pouvons sérialiser une tranche d'éléments Row dans un JSON valide array :
rows := []Row{{"ooid1", 2.0, "Söme text"}, {"ooid2", 1.3, "Åther text"}} marshalled, _ := json.Marshal(rows) // Output: // {"results": [["ooid1", 2.0, "Söme text"], ["ooid2", 1.3, "Åther text"]]}
Désérialisation de JSON
Si nécessaire, nous pouvons également implémenter l'interface json.Unmarshaler pour désérialiser les données JSON dans les structures Row. Cela implique une approche similaire consistant à utiliser une tranche intermédiaire de valeurs d'interface pour stocker les valeurs extraites du tableau JSON :
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 }
En implémentant les interfaces json.Marshaler et json.Unmarshaler, nous pouvons efficacement sérialiser et désérialiser tableaux de types mixtes en Go, nous permettant de manipuler des structures de données avec des éléments hétérogènes comme JSON.
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!