Comment sérialiser un tableau JSON de type mixte dans Go
Défi
Création d'un JSON un tableau qui représente des données hétérogènes, telles qu'un mélange de chaînes, de nombres à virgule flottante et de caractères Unicode, peut être difficile dans Go en raison à son manque de prise en charge des types mixtes dans les tableaux.
Solution
Pour surmonter cette limitation, nous pouvons exploiter le mécanisme de sérialisation JSON personnalisable de Go en implémentant json.Marshaler et Interfaces json.Unmarshaler. En définissant ces fonctions sur notre type personnalisé, nous prenons le contrôle de la façon dont nos données sont sérialisées et désérialisées.
Sérialisation (Marshaling)
Pour sérialiser nos données de type mixte dans un tableau JSON, nous créons une fonction MarshalJSON pour notre type personnalisé. Dans cette fonction, nous créons une tranche intermédiaire d'éléments interface{} et la remplissons avec les valeurs que nous voulons sérialiser. Nous utilisons ensuite la fonction json.Marshal sur la tranche pour générer la représentation JSON de nos données.
Désérialisation (Unmarshaling)
De même, pour la désérialisation, nous créons un Fonction UnmarshalJSON. Ici, nous utilisons d'abord la fonction json.Unmarshal pour analyser les octets JSON entrants dans la tranche intermédiaire des éléments interface{}. Nous extrayons ensuite manuellement les valeurs de la tranche et les attribuons aux champs de notre type personnalisé.
Exemple
L'exemple suivant montre comment sérialiser et désérialiser un mixte -type structure de données :
package main import ( "encoding/json" "fmt" ) 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) } func main() { rows := []Row{ {"ooid1", 2.0, "Söme text"}, {"ooid2", 1.3, "Åther text"}, } marshalled, _ := json.Marshal(rows) fmt.Println(string(marshalled)) }
Conclusion
Par en implémentant les interfaces json.Marshaler et json.Unmarshaler, nous gagnons en flexibilité pour gérer des structures de données de type mixte dans Go. Cette approche nous permet de personnaliser le processus de sérialisation et de désérialisation, produisant le format de tableau JSON souhaité.
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!