Maison >développement back-end >Golang >Comment regrouper les données JSON dans une structure personnalisée avec des sous-structures spécialisées dans Go ?

Comment regrouper les données JSON dans une structure personnalisée avec des sous-structures spécialisées dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-06 14:27:02982parcourir

How to Unmarshal JSON Data into a Custom Struct with Specialized Substructures in Go?

Décomposer les données JSON dans une structure personnalisée

Dans Go, la désorganisation des données JSON dans une structure est une tâche courante. Considérons les données JSON suivantes :

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

Nous pouvons définir une structure pour représenter ces données :

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

Cependant, que se passe-t-il si nous voulons spécialiser davantage la structure des données, représentant chaque commande en tant que structure individuelle :

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

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

Unmarshaling personnalisé avec MarshalJSON

Pour y parvenir, nous pouvons implémenter l'interface json.Unmarshaler sur notre structure Order :

<code class="go">type Order struct {
    Price float64
    Volume float64
}

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 méthode demande à Go de décoder chaque élément du JSON sous forme de tableau à 2 éléments et attribue les valeurs aux champs Prix et Volume de la structure Commande.

Après avoir implémenté cette méthode, nous pouvons maintenant désorganiser les données JSON. dans notre structure personnalisée :

<code class="go">jsonBlob := []byte(`{"Asks": [[21, 1], [22, 1]], "Bids": [[20, 1], [19, 1]]}`)
message := &Message{}
if err := json.Unmarshal(jsonBlob, message); err != nil {
    panic(err)
}</code>

Maintenant, nous pouvons accéder aux données à l'aide de la structure Order personnalisée :

<code class="go">fmt.Println(message.Asks[0].Price)</code>

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