Maison > développement back-end > Golang > le corps du texte

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

Linda Hamilton
Libérer: 2024-11-06 14:27:02
original
882 Les gens l'ont consulté

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

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

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

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

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

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

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!