首页  >  文章  >  后端开发  >  以下是一些问题格式的标题选项,适合您提供的文章的内容: **直接且以问题为中心:** * **当键是动态的时如何解组 Go 中的切片映射

以下是一些问题格式的标题选项,适合您提供的文章的内容: **直接且以问题为中心:** * **当键是动态的时如何解组 Go 中的切片映射

Susan Sarandon
Susan Sarandon原创
2024-10-25 11:02:02565浏览

Here are a few title options in a question format, catering to the content of your provided article:

**Direct &  Problem-Focused:**

* **How to Unmarshal a Map of Slices in Go When Keys are Dynamic?**
* **Empty Map After Unmarshaling: Why is my Go Struct

将结构自定义解组为切片映射

问题描述

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn