首頁 > 後端開發 > Golang > 主體

如何使用切片映射將 JSON 物件解組為結構?

Patricia Arquette
發布: 2024-10-31 16:39:29
原創
908 人瀏覽過

How to Unmarshal a JSON Object into a Struct with a Map of Slices?

將結構自訂解組為切片映射

問題

需要自訂解碼才能將 JSON 解碼為具有切片映射的結構。使用預設行為,映射保持為空。

解決方案

使用自訂 Unmarshaler:

  1. 實作 json.Unmarshaler 介面目標結構。
  2. 在 UnmarshalJSON 方法中:

    • 將 JSON 物件的鍵和值解碼為原始、未解碼的 JSON。
    • 從原始 JSON 值中擷取 Last 欄位(如果存在)。
    • 將原始值轉換為切片對應並將其指派給 Pair 欄位。

替代解決方案(不使用地圖):

如果JSON 結構是固定的,則可以在不使用地圖的情況下調整目標結構以符合JSON 佈局。

範例:

使用自訂UnmarshalJSON 方法的自訂解組程式碼:

<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error {
    // Decode keys and values
    var obj map[string]json.RawMessage
    if err := json.Unmarshal(d, &obj); err != nil {
        return err
    }

    // Extract "last" field
    if last, ok := obj["last"]; ok {
        if err := json.Unmarshal(last, &r.Last); err != nil {
            return err
        }
        delete(obj, "last")
    }

    // Decode and assign Pair field
    r.Pair = make(map[string][]Candles, len(obj))
    for key, val := range obj {
        cc := []Candles{}
        if err := json.Unmarshal(val, &cc); err != nil {
            return err
        }
        r.Pair[key] = cc
    }
    return nil
}</code>
登入後複製

透過調整結構的替代解決方案:

<code class="go">type OHLC_RESS struct {
    Pair []Candles `json:"XXBTZUSD"`
    Last int64     `json:"last"`
}</code>
登入後複製
透過調整結構的替代解決方案:透過調整結構的替代解決方案:透過調整結構的替代解決方案:透過調整結構的替代解決方案:透過調整結構的替代解決方案:透過調整結構的替代解決方案:透過調整結構的替代解決方案:透過調整結構的替代方案:

以上是如何使用切片映射將 JSON 物件解組為結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!