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

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

Linda Hamilton
Linda Hamilton原創
2024-11-07 05:58:03778瀏覽

How to Customize JSON Unmarshaling into a Specific Struct 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>

使用json.Unmarshaler 進行自訂解組

要將JSON 資料解組到此專用結構中,您可以在Order 結構上實作json.Unmarshaler 介面:

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

此實作指定應從浮點數的兩元素數組而不是結構(物件)的預設表示形式解碼Order 類型。

用法範例:

<code class="go">m := new(Message)
err := json.Unmarshal(b, &m)
fmt.Println(m.Asks[0].Price) // Output: 21</code>

透過實作 json.Unmarshaler,您可以輕鬆自訂解組過程,以滿足您特定的資料結構要求。

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

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