gpt4 book ai didi

json - 为什么去 UnmarshalJSON 接收 Json 对象而不仅仅是值

转载 作者:IT王子 更新时间:2023-10-29 02:13:25 25 4
gpt4 key购买 nike

我得到了以下自定义类型:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com