Maison >développement back-end >Golang >Comment sérialiser et désérialiser des tableaux JSON de type mixte dans Go ?

Comment sérialiser et désérialiser des tableaux JSON de type mixte dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-10 13:38:10875parcourir

How to Serialize and Deserialize Mixed-Type JSON Arrays in Go?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn