我有以下自定义类型:
type TimeWithoutZone struct {
time.Time
}
Marshaling工作正常:
const timeWithoutZoneFormat = "2006-01-02T15:04:05"
func (t *TimeWithoutZone) MarshalJSON() ([]byte, error) {
stamp := fmt.Sprintf(`"%s"`, t.Time.Format(timeWithoutZoneFormat ))
return []byte(stamp), nil
}
但是这里的日期无法解析:
func (t *TimeWithoutZone) UnmarshalJSON(data []byte) (err error) {
log.Println("Parsing: " + string(data))
t.Time, err = time.Parse(`"` + timeWithoutZoneFormat + `"`, string(data))
if err != nil {
return err
}
return nil
}
它记录:Parsing: {"time":"2016-09-06T11:06:16"}
但我希望它只解析time
我做错了什么?这是相关的测试:
type TimeTestObj struct {
Time TimeWithoutZone `json:"time"`
}
func TestParseDataWithoutTimezone(t *testing.T) {
parsed := TimeWithoutZone{}
data := `{"time":"2016-09-06T11:06:16"}`
err := json.Unmarshal([]byte(data), &parsed)
if err != nil {
t.Error(err)
}
if parsed.Unix() != 1473152776 {
t.Error(parsed.Unix(), "!=", 1473152776)
}
}
我找到的所有示例,甚至来自Go time包的默认解析器似乎都是这样工作......
答案 0 :(得分:1)
哇,我在这一行中输错了类型:
parsed := TimeWithoutZone{}
必须是
parsed := TimeTestObj{}
...