作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我得到了以下自定义类型:
type TimeWithoutZone struct {
time.Time
}
编码(marshal)处理工作正常:
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 包中的默认解析器似乎都是这样工作的...
最佳答案
哇,我只是在这一行输入了错误的类型:
parsed := TimeWithoutZone{}
必须是
parsed := TimeTestObj{}
...
关于json - 为什么去 UnmarshalJSON 接收 Json 对象而不仅仅是值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39345921/
我是一名优秀的程序员,十分优秀!