首頁  >  文章  >  後端開發  >  如何在 Go 中自訂將 JSON 資料解組為特定結構?

如何在 Go 中自訂將 JSON 資料解組為特定結構?

DDD
DDD原創
2024-11-06 19:38:02300瀏覽

How to Customize Unmarshaling of JSON Data into Specific Structs in Go?

自訂將 JSON 資料解組為特定結構

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn