In Go ist das Unmarshaling von JSON-Daten in eine Struktur eine häufige Aufgabe. Betrachten Sie die folgenden JSON-Daten:
<code class="json">{ "Asks": [[21, 1], [22, 1]], "Bids": [[20, 1], [19, 1]] }</code>
Wir können eine Struktur definieren, um diese Daten darzustellen:
<code class="go">type Message struct { Asks [][]float64 `json:"Asks"` Bids [][]float64 `json:"Bids"` }</code>
Was aber, wenn wir die Datenstruktur, die jede Bestellung darstellt, weiter spezialisieren möchten? als individuelle Struktur:
<code class="go">type Message struct { Asks []Order `json:"Asks"` Bids []Order `json:"Bids"` } type Order struct { Price float64 Volume float64 }</code>
Um dies zu erreichen, können wir die json.Unmarshaler-Schnittstelle in unserer Order-Struktur implementieren:
<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>
Diese Methode weist Go an, jedes Element im JSON als 2-Elemente-Array zu dekodieren und weist die Werte den Feldern „Preis“ und „Volumen“ der Order-Struktur zu.
Nach der Implementierung dieser Methode können wir nun die JSON-Daten entmarshalieren in unsere benutzerdefinierte Struktur:
<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>
Jetzt können wir über die benutzerdefinierte Order-Struktur auf die Daten zugreifen:
<code class="go">fmt.Println(message.Asks[0].Price)</code>
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich JSON-Daten in eine benutzerdefinierte Struktur mit speziellen Unterstrukturen in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!