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

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

Susan Sarandon
Susan Sarandon原創
2024-11-06 14:35:02788瀏覽

How to Unmarshal JSON Data into a Custom Data Structure in Go?

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

在Go 中,通常需要將JSON 資料解組為特定的資料結構。這可以透過定義自訂類型並實作 json.Unmarshaler 介面來實現。

問題陳述

假設我們有包含兩個訂單資訊數組的 JSON 資料:Asks 和出價。我們希望將此資料解組到具有兩個欄位的結構中:Asks 和 Bids,其中每個欄位都是 Order 結構體的一部分。

自訂型別和解組器實作

為了建立我們想要的資料結構,我們定義一個名為Order 的自訂類型:

<code class="go">type Order struct {
    Price float64
    Volume float64
}</code>

接下來,我們為Order 類型實作json.Unmarshaler 介面。這允許我們指定如何將 JSON 資料解析為自訂結構:

<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>

此實作期望訂單的 JSON 資料是兩個浮點數的數組,分別表示價格和數量。

解組JSON 資料

使用我們的自訂類型和UnmarshalJSON 實現,我們現在可以如下解組JSON 資料:

<code class="go">b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`)
m := new(Message)
if err := json.Unmarshal(b, &m); err != nil {
    // handle error
}

fmt.Println(m.Asks[0].Price) // 21</code>

透過實現json.Unmarshaler 接口,我們實現了將JSON 資料解組為自訂資料結構的目標,該資料結構可以更準確地表示訂單資訊。

以上是如何在 Go 中將 JSON 資料解組為自訂資料結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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