Unmarshaling von JSON-Daten in eine benutzerdefinierte Datenstruktur
In Go ist es oft notwendig, JSON-Daten in bestimmte Datenstrukturen zu entmarshalieren. Dies kann durch die Definition benutzerdefinierter Typen und die Implementierung der json.Unmarshaler-Schnittstelle erreicht werden.
Problemstellung
Angenommen, wir haben JSON-Daten mit zwei Arrays von Bestellinformationen: Asks und Gebote. Wir möchten diese Daten in eine Struktur mit zwei Feldern entmarshalieren: Asks und Bids, wobei jedes Feld ein Teil der Order-Strukturen ist.
Benutzerdefinierter Typ und Unmarshaler-Implementierung
Um unsere gewünschte Datenstruktur zu erstellen, definieren wir einen benutzerdefinierten Typ namens Order:
<code class="go">type Order struct { Price float64 Volume float64 }</code>
Als nächstes implementieren wir die json.Unmarshaler-Schnittstelle für den Order-Typ. Dadurch können wir angeben, wie die JSON-Daten in unsere benutzerdefinierte Struktur geparst werden sollen:
<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>
Diese Implementierung erwartet, dass die JSON-Daten für eine Bestellung ein Array aus zwei Floats sind, die den Preis und das Volumen darstellen.
Unmarshaling der JSON-Daten
Mit unserem benutzerdefinierten Typ und der UnmarshalJSON-Implementierung können wir jetzt die JSON-Daten wie folgt entmarshalieren:
<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>
Durch die Implementierung der json.Unmarshaler-Schnittstelle haben wir unser Ziel erreicht, die JSON-Daten in eine benutzerdefinierte Datenstruktur zu entmarshalieren, die die Bestellinformationen genauer darstellt.
Das obige ist der detaillierte Inhalt vonWie entpacke ich JSON-Daten in eine benutzerdefinierte Datenstruktur in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!