Maison > développement back-end > Golang > Comment personnaliser le démarshaling JSON dans une structure spécifique dans Go ?

Comment personnaliser le démarshaling JSON dans une structure spécifique dans Go ?

Linda Hamilton
Libérer: 2024-11-07 05:58:03
original
880 Les gens l'ont consulté

How to Customize JSON Unmarshaling into a Specific Struct in Go?

Désagrégation personnalisée des données JSON dans une structure spécifique

Dans Go, la désorganisation des données JSON dans une structure prédéfinie est simple. Cependant, que se passe-t-il si vous souhaitez personnaliser encore davantage la structure des données ? Supposons que vous disposiez des données JSON suivantes :

<code class="json">{
  "Asks": [
    [21, 1],
    [22, 1]
  ],
  "Bids": [
    [20, 1],
    [19, 1]
  ]
}</code>
Copier après la connexion

Vous pouvez facilement définir une structure pour correspondre à cette structure :

<code class="go">type Message struct {
    Asks [][]float64 `json:"Asks"`
    Bids [][]float64 `json:"Bids"`
}</code>
Copier après la connexion

Cependant, vous préférerez peut-être une structure de données plus spécialisée :

<code class="go">type Message struct {
    Asks []Order `json:"Asks"`
    Bids []Order `json:"Bids"`
}

type Order struct {
    Price float64
    Volume float64
}</code>
Copier après la connexion

Démarshaling personnalisé à l'aide de json.Unmarshaler

Pour démarshaler les données JSON dans cette structure spécialisée, vous pouvez implémenter l'interface json.Unmarshaler sur votre structure Order :

<code class="go">func (o *Order) UnmarshalJSON(data []byte) error {
    var v [2]float64
    if err := json.Unmarshal(data, &v); err != nil {
        return err
    }
    o.Price = v[0]
    o.Volume = v[1]
    return nil
}</code>
Copier après la connexion

Cette implémentation spécifie que le type Order doit être décodé à partir d'un tableau de flotteurs à deux éléments plutôt que de la représentation par défaut d'une structure (un objet).

Exemple d'utilisation :

<code class="go">m := new(Message)
err := json.Unmarshal(b, &m)
fmt.Println(m.Asks[0].Price) // Output: 21</code>
Copier après la connexion

En implémentant json.Unmarshaler, vous pouvez facilement personnaliser le processus de désorganisation en fonction de vos exigences spécifiques en matière de structure de données.

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