Maison > Article > développement back-end > Comment regrouper les données JSON dans une structure de données personnalisée dans 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!