在 Go 中,將 JSON 資料解組為預定義結構是一項常見任務。但是,當您需要進一步自訂未編組的資料結構時,此過程可能會變得更加複雜。本文探討了一種根據特定要求客製化解組過程的方法。
讓我們考慮以下JSON 資料:
<code class="json">b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`)</code>
您的初始方法涉及定義一個具有兩個欄位的struct Message:Asks 和出價,每個出價都持有一個浮點數數組。但是,您尋求更專業的結構,其中這些陣列包含 Order 類型的結構而不是簡單的浮點數。所需的資料結構如下所示:
<code class="go">type Message struct { Asks []Order `json:"Bids"` Bids []Order `json:"Asks"` } type Order struct { Price float64 Volume float64 }</code>
為了實現這種自訂,我們可以利用 Go 的 json.Unmarshaler 介面。透過在 Order 結構上實作此接口,我們提供了一個自訂解組邏輯,可將 JSON 陣列元素轉換為 Order 結構。
<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>
此實作指定應從 2 元素數組解碼 Order 類型浮點數,其中第一個元素代表價格,第二個元素代表數量。
使用此自訂解組邏輯,您現在可以有效地將 JSON 資料解組到所需的 struct Message 中。
<code class="go">m := new(Message) err := json.Unmarshal(b, &m) fmt.Println(m.Asks[0].Price)</code>
透過自訂 UnmarshalJSON 實現,此程式碼將列印第一個詢問訂單的價格。這種客製化的解組方法提供了一種靈活的方法來根據 Go 中的特定要求自訂資料解組。
以上是如何在 Go 中自訂將 JSON 資料解組為特定結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!