Sérialisation de tableaux JSON hétérogènes dans Go
Dans Go, sérialisation de tableaux JSON hétérogènes (contenant un mélange de chaînes, de chiffres et de caractères Unicode) pose un défi en raison de l'interdiction du langage sur les tranches de type mixte. Considérez la structure JSON souhaitée suivante :
{ results: [ ["ooid1", 2.0, "Söme text"], ["ooid2", 1.3, "Åther text"], ] }
Sérialisation avec une interface Marshaler
Pour personnaliser la sérialisation, nous pouvons implémenter l'interface json.Marshaler pour notre type de ligne. Nous utiliserons une tranche intermédiaire d'interface{} pour encoder les valeurs hétérogènes :
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) }
Dans cet exemple, la méthode MarshalJSON convertit la ligne en un tableau de types mixtes.
Désérialisation avec une interface Unmarshaler
Nous pouvons de la même manière implémenter l'interface json.Unmarshaler pour déstructurer les valeurs hétérogènes :
func (r *Row) UnmarshalJSON(bs []byte) error { arr := []interface{}{} json.Unmarshal(bs, &arr) r.Ooid = arr[0].(string) r.Score = arr[1].(float64) r.Text = arr[2].(string) return nil }
Cette méthode reconvertit les octets JSON dans notre structure Row.
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!