首頁 > 後端開發 > Golang > 如何在 Go 中將 JSON 資料解組到具有專用子結構的自訂結構中?

如何在 Go 中將 JSON 資料解組到具有專用子結構的自訂結構中?

Linda Hamilton
發布: 2024-11-06 14:27:02
原創
941 人瀏覽過

How to Unmarshal JSON Data into a Custom Struct with Specialized Substructures in Go?

將 JSON 資料解組到自訂結構中

在 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>
登入後複製

使用MarshalJSON 進行自訂解組

要實現此目的,我們可以在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板