In Go kann das Unmarshaling von JSON-Daten in komplexe Strukturen manchmal eine spezielle Handhabung erfordern. In diesem Artikel wird ein Szenario untersucht, in dem das gewünschte Ausgabeformat von der Standarddarstellung für Strukturen abweicht.
Berücksichtigen Sie die folgenden JSON-Daten:
<code class="json">b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`)</code>
Verwenden Sie Folgendes struct:
<code class="go">type Message struct { Asks [][]float64 `json:"Bids"` Bids [][]float64 `json:"Asks"` }</code>
Wir können die Daten wie folgt entmarshalieren:
<code class="go">m := new(Message) err := json.Unmarshal(b, &m) if err != nil { // Handle error }</code>
Wir würden die entmarshaleden Daten jedoch lieber im folgenden Format haben:
<code class="go">type Message struct { Asks []Order `json:"Bids"` Bids []Order `json:"Asks"` } 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">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>
Dies weist den JSON-Decoder an, Order als 2-Elemente-Array zu behandeln von Floats anstelle eines Objekts.
Jetzt können wir die JSON-Daten entmarshalieren und wie gewünscht auf die Werte zugreifen:
<code class="go">m := new(Message) err := json.Unmarshal(b, &m) if err != nil { // Handle error } fmt.Println(m.Asks[0].Price)</code>
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich komplexe JSON-Daten in verschachtelte Strukturen in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!