首先我有一個結構: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 關注
- 127 瀏覽
添加回答
舉報
0/150
提交
取消