Maison  >  Article  >  développement back-end  >  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
Linda Hamiltonoriginal
2024-11-07 05:58:03778parcourir

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>

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>

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>

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>

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>

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!

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