type customTime struct { time.Time } func (t *customTime) UnmarshalJSON(b []byte) (err error) { layout := []string{ "2006-01-02 15:04:05 MST", "2006-01-02 15:04:05 Z07:00", "2006-01-02 15:04:05 Z0700", time.RFC3339, } s := strings.Trim(string(b), "\"") if s == "null" { t.Time = time.Time{} return } for _, l := range layout { t.Time, err = time.Parse(l, s) if err == nil { break } } return }