处理 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中文网其他相关文章!