Maison > Article > développement back-end > Comment regrouper des données JSON complexes dans des structures imbriquées dans Go ?
Dans Go, la désorganisation des données JSON dans des structures complexes peut parfois nécessiter une manipulation spécialisée. Cet article explore un scénario dans lequel le format de sortie souhaité diffère de la représentation par défaut des structures.
Considérez les données JSON suivantes :
<code class="json">b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`)</code>
Utilisation des éléments suivants struct :
<code class="go">type Message struct { Asks [][]float64 `json:"Bids"` Bids [][]float64 `json:"Asks"` }</code>
Nous pouvons décompresser les données comme suit :
<code class="go">m := new(Message) err := json.Unmarshal(b, &m) if err != nil { // Handle error }</code>
Cependant, nous préférerions avoir les données non marshalées au format suivant :
<code class="go">type Message struct { Asks []Order `json:"Bids"` Bids []Order `json:"Asks"` } type Order struct { Price float64 Volume float64 }</code>
Pour y parvenir, nous pouvons implémenter l'interface json.Unmarshaler sur notre structure 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>
Cela demande au décodeur JSON de traiter Order comme un tableau à 2 éléments de flotteurs plutôt que d'un objet.
Maintenant, nous pouvons désorganiser les données JSON et accéder aux valeurs comme nous le souhaitons :
<code class="go">m := new(Message) err := json.Unmarshal(b, &m) if err != nil { // Handle error } fmt.Println(m.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!