處理JSON 資料時,您可能會遇到需要將JSON 物件中的特定元素映射到切片映射的情況與您的資料結構一致的欄位。但是,預設的 JSON 解組機制可能不會總是滿足這些要求。這就是自訂解組發揮作用的地方。
在提供的範例中,您有一個 OHLC_RESS 結構體,其映射欄位 Pair 期望蠟燭片作為值。但是,初始代碼無法填入 Pair 映射。
解組行為源自於多個因素:
要解決這些問題,您可以透過在結構中實現相關方法來利用json.Unmarshaler 介面:
<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error { // Decode JSON object keys and values into raw messages. var obj map[string]json.RawMessage if err := json.Unmarshal(d, &obj); err != nil { return err } // Handle the "last" field. if last, ok := obj["last"]; ok { if err := json.Unmarshal(last, &r.Last); err != nil { return err } delete(obj, "last") } // Unmarshal the remaining elements into the 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>
此解決方案:
透過實作此自訂解組,您可以靈活地控制特定 JSON 元素的方式對應到您想要的資料結構,即使 JSON 物件的結構不會直接與其對齊。
以上是當 JSON 鍵與結構體欄位名稱不符時,如何將結構體自訂解組到 Go 中的切片映射中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!