在 Go 中,將 JSON 資料解組到結構中是一項常見任務。考慮以下JSON 資料:
<code class="json">{ "Asks": [[21, 1], [22, 1]], "Bids": [[20, 1], [19, 1]] }</code>
我們可以定義一個結構體來表示此資料:
<code class="go">type Message struct { Asks [][]float64 `json:"Asks"` Bids [][]float64 `json:"Bids"` }</code>
但是,如果我們想要進一步專門化資料結構,表示每個訂單,該怎麼辦作為單獨的結構:
<code class="go">type Message struct { Asks []Order `json:"Asks"` Bids []Order `json:"Bids"` } type Order struct { Price float64 Volume float64 }</code>
要實現此目的,我們可以在Order 結構上實現json.Unmarshaler 介面:
<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>
此方法指示Go 將JSON 中的每個元素解碼為2 元素數組,並將值分配給Order 結構體的Price 和Volume 欄位。
實作此方法後,我們現在可以解組JSON 資料進入我們的自訂結構體:
<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>
現在,我們可以使用自訂Order 結構體存取資料:
<code class="go">fmt.Println(message.Asks[0].Price)</code>
以上是如何在 Go 中將 JSON 資料解組到具有專用子結構的自訂結構中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!