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

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

Patricia Arquette
Libérer: 2024-12-07 07:01:12
original
257 Les gens l'ont consulté

How to Serialize Mixed-Type JSON Arrays in Go?

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))
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal