解组映射结构

首先我有一个结构:


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) {

    // ????

}  

任何想法?


凤凰求蛊
浏览 78回答 1
1回答

呼唤远方

您可以使用与编码相同的方式解码 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}但是,我强烈建议使用切片类型,而不是地图。解码后的输出是一个数组,所以类型也应该是一个数组。
打开App,查看更多内容
随时随地看视频慕课网APP