Heim > Artikel > Backend-Entwicklung > Wie kann ich das JSON-Unmarshaling in einer bestimmten Struktur in Go anpassen?
In Go ist das Unmarshaling von JSON-Daten in eine vordefinierte Struktur unkompliziert. Was aber, wenn Sie die Datenstruktur noch weiter anpassen möchten? Angenommen, Sie haben die folgenden JSON-Daten:
<code class="json">{ "Asks": [ [21, 1], [22, 1] ], "Bids": [ [20, 1], [19, 1] ] }</code>
Sie können ganz einfach eine Struktur definieren, die dieser Struktur entspricht:
<code class="go">type Message struct { Asks [][]float64 `json:"Asks"` Bids [][]float64 `json:"Bids"` }</code>
Sie bevorzugen jedoch möglicherweise eine speziellere Datenstruktur:
<code class="go">type Message struct { Asks []Order `json:"Asks"` Bids []Order `json:"Bids"` } type Order struct { Price float64 Volume float64 }</code>
Um die JSON-Daten in dieser speziellen Struktur zu entmarshalieren, können Sie die json.Unmarshaler-Schnittstelle in Ihrer Bestellstruktur implementieren:
<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 gibt an, dass der Order-Typ aus einem Array von Floats mit zwei Elementen und nicht aus der Standarddarstellung für eine Struktur (ein Objekt) dekodiert werden soll.
Beispielverwendung:
<code class="go">m := new(Message) err := json.Unmarshal(b, &m) fmt.Println(m.Asks[0].Price) // Output: 21</code>
Durch die Implementierung von json.Unmarshaler können Sie den Unmarshalling-Prozess ganz einfach an Ihre spezifischen Datenstrukturanforderungen anpassen.
Das obige ist der detaillierte Inhalt vonWie kann ich das JSON-Unmarshaling in einer bestimmten Struktur in Go anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!