首先我有一个结构:type times map[time.Time]struct{}我需要为此编写Marshal/ Unmarshaljson 转换方法。我写过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) { // ????} 任何想法?
1 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
您可以使用与编码相同的方式解码 json(仅使用密钥):
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
}
但是,我强烈建议使用切片类型,而不是地图。解码后的输出是一个数组,所以类型也应该是一个数组。
- 1 回答
- 0 关注
- 94 浏览
添加回答
举报
0/150
提交
取消