理解 JSON 解组可能具有挑战性。本文探讨了使用以下代码片段在 Go 中解组映射时遇到的问题:
<code class="go">import ( "encoding/json" "fmt" ) type OHLC_RESS struct { Pair map[string][]Candles Last int64 `json:"last"` } type Candles struct { // ... } func (c *Candles) UnmarshalJSON(d []byte) error { // ... } func main() { // ... }</code>
运行代码后,尽管 Last 字段已正确解组,但 Pair 映射仍为空。
选项 1:调整结构体定义
所提供的 JSON 示例的最简单解决方案是消除映射并将结构体定义与 JSON 结构对齐:
<code class="go">type OHLC_RESS struct { Pair []Candles `json:"XXBTZUSD"` Last int64 `json:"last"` }</code>
选项 2:实现自定义 Unmarshaler
如果映射键是动态的且无法在字段标签中硬编码,则自定义实现 json.Unmarshaler接口是必要的。这可以通过在 OHLC_RESS 结构中实现 UnmarshalJSON 方法来实现:
<code class="go">func (r *OHLC_RESS) UnmarshalJSON(d []byte) error { // ... }</code>
UnmarshalJSON 实现分别解码 JSON 键和值,以不同于其他元素的方式处理“最后一个”元素。剩余元素被解组到 Pair 映射中。
以上是以下是一些问题格式的标题选项,适合您提供的文章的内容: **直接且以问题为中心:** * **当键是动态的时如何解组 Go 中的切片映射的详细内容。更多信息请关注PHP中文网其他相关文章!