Maison >développement back-end >Golang >Comment sérialiser un tableau JSON de type mixte dans Go ?

Comment sérialiser un tableau JSON de type mixte dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-11 09:29:10124parcourir

How to Serialize a Mixed-Type JSON Array in Go?

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!

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