將結構體自訂解組為切片映射
在Go 中,當預設解組行為不夠時,可以使用自訂解組。考慮以下場景:具有映射欄位的結構,需要使用動態鍵從 JSON 物件填入。
範例問題
提供的程式碼示範了一種嘗試將JSON 回應解組到包含切片結構映射的結構中(Pair map[string][]Candles )。然而,解組後映射仍然是空的。
解決方案:選擇更簡單的結構
一個簡單的解決方案是消除映射並修改結構以與JSON 結構:
<code class="go">type OHLC_RESS struct { Pair []Candles `json:"XXBTZUSD"` Last int64 `json:"last"` }</code>
使用JSON.Unmarshaler 進行自訂解組
或者,為了保留基於映射的結構,需要自訂實作json.Unmarshaler 介面。這種方法提供了對解組過程的完全控制。
實作細節:
程式碼片段:
<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error { // Decode keys only. var obj map[string]json.RawMessage if err := json.Unmarshal(d, &obj); err != nil { return err } // Decode "last" element. if last, ok := obj["last"]; ok { if err := json.Unmarshal(last, &r.Last); err != nil { return err } delete(obj, "last") } // Decode remaining elements into Pair map. 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>
以上是如何在 Go 中將帶有切片映射的結構體解組為切片映射?的詳細內容。更多資訊請關注PHP中文網其他相關文章!