Maison >développement back-end >Golang >Comment personnaliser le démarshaling des données JSON dans des structures spécifiques dans Go ?

Comment personnaliser le démarshaling des données JSON dans des structures spécifiques dans Go ?

DDD
DDDoriginal
2024-11-06 19:38:02364parcourir

How to Customize Unmarshaling of JSON Data into Specific Structs in Go?

Désagrégation personnalisée des données JSON dans des structures spécifiques

Dans Go, la désorganisation des données JSON dans des structures prédéfinies est une tâche courante. Cependant, ce processus peut devenir plus complexe lorsque vous devez personnaliser davantage la structure de données non marshalée. Cet article explore une approche permettant d'adapter le processus de démarshalage à des exigences spécifiques.

Considérons les données JSON suivantes :

<code class="json">b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`)</code>

Votre approche initiale impliquait de définir une structure Message avec deux champs, Asks et Offres, chacune contenant un tableau de flotteurs. Cependant, vous recherchez une structure plus spécialisée dans laquelle ces tableaux contiennent des structures de type Order au lieu de simples flottants. La structure de données souhaitée ressemble à :

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

type Order struct {
    Price float64
    Volume float64
}</code>

Pour réaliser cette personnalisation, nous pouvons exploiter l'interface json.Unmarshaler de Go. En implémentant cette interface sur la structure Order, nous fournissons une logique de démarshaling personnalisée qui convertit les éléments du tableau JSON en structures 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 à 2 éléments. de flottants, où le premier élément représente le prix et le deuxième élément représente le volume.

En utilisant cette logique de démarshaling personnalisée, vous pouvez désormais dégrouper efficacement les données JSON dans le message de structure souhaité.

<code class="go">m := new(Message)
err := json.Unmarshal(b, &m)
fmt.Println(m.Asks[0].Price)</code>

Avec l'implémentation personnalisée d'UnmarshalJSON, ce code imprimera le prix de la première commande demandée. Cette approche de démarshaling personnalisée offre un moyen flexible d'adapter le démarshaling des données à des exigences spécifiques 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