Maison >développement back-end >Golang >Comment regrouper les données JSON dans une structure de données personnalisée dans Go ?

Comment regrouper les données JSON dans une structure de données personnalisée dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-06 14:35:02793parcourir

How to Unmarshal JSON Data into a Custom Data Structure in Go?

Dégroupage des données JSON dans une structure de données personnalisée

Dans Go, il est souvent nécessaire de dégrouper les données JSON dans des structures de données spécifiques. Ceci peut être réalisé en définissant des types personnalisés et en implémentant l'interface json.Unmarshaler.

Énoncé du problème

Supposons que nous ayons des données JSON avec deux tableaux d'informations de commande : Demandes et Offres. Nous souhaitons regrouper ces données dans une structure avec deux champs : Asks et Bids, où chaque champ est une tranche de structures Order.

Type personnalisé et implémentation de Unmarshaler

Pour créer la structure de données souhaitée, nous définissons un type personnalisé appelé Order :

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

Ensuite, nous implémentons l'interface json.Unmarshaler pour le type Order. Cela nous permet de spécifier comment les données JSON doivent être analysées dans notre structure personnalisée :

<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 s'attend à ce que les données JSON d'une commande soient un tableau de deux flottants, qui représentent le prix et le volume.

Démarshalisation des données JSON

Avec notre type personnalisé et l'implémentation UnmarshalJSON en place, nous pouvons désormais démarshaler les données JSON comme suit :

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

fmt.Println(m.Asks[0].Price) // 21</code>

En implémentant l'interface json.Unmarshaler, nous avons atteint notre objectif de décomposer les données JSON dans une structure de données personnalisée qui représente plus précisément les informations de commande.

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