gpt4 book ai didi

go - 解码映射结构

转载 作者:数据小太阳 更新时间:2023-10-29 03:31:31 26 4
gpt4 key购买 nike

首先我有一个结构:

type times map[time.Time]struct{}

我需要为它编写 Marshal/Unmarshal 方法来转换 json。我写过MarshalJSON方法,但不明白如何写UnmarshalJSON方法。

func (ts times) keys() []time.Time {
res := make([]time.Time, 0, len(ts))
for key := range ts {
res = append(res, key)
}
return res
}

func (ts times) MarshalJSON() ([]byte, error) {
return json.Marshal(ts.keys())
}

func (ts *times) UnmarshalJSON(b []byte) (error) {
// ????
}

有什么想法吗?

最佳答案

您可以使用与编码相同的方式解码 json(仅使用 key ):

func (ts *times) UnmarshalJSON(b []byte) error {
var t []time.Time

err := json.Unmarshal(b, &t)
if err != nil {
return err
}

for _, v := range t {
(*ts)[v] = struct{}{}
}

return nil
}

参见:https://play.golang.org/p/0ViEBX_5iLw

但是,我强烈建议使用 slice 类型,而不是 map 。解码后的输出是一个数组,所以类型也应该是一个数组。

关于go - 解码映射结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52476454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com