从 JSON 解码非标准时间格式
在处理包含非标准时间格式的 JSON 数据时,标准 JSON 解码可能会遇到问题,因为它期望特定的时间格式模式。为了克服这个问题,可以实现自定义编组和解组函数。
例如,考虑以下 JSON:
{ "name": "John", "birth_date": "1996-10-07" }
假设我们想要将其解码为 Person 结构:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
使用标准 JSON 解码器:
person := Person{} decoder := json.NewDecoder(req.Body); if err := decoder.Decode(&person); err != nil { log.Println(err) }
会导致错误,因为解码器无法解析非标准时间格式。为了解决这个问题,我们可以为时间值创建一个自定义类型别名,并实现自定义编组和解组函数。
示例实现可以是:
// Type alias type JsonBirthDate time.Time // Implement UnmarshalJSON func (j *JsonBirthDate) UnmarshalJSON(b []byte) error { s := strings.Trim(string(b), `"`) t, err := time.Parse("2006-01-02", s) if err != nil { return err } *j = JsonBirthDate(t) return nil } // Implement MarshalJSON func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) } // Example use in struct type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` }
使用这些自定义函数, JSON 数据现在可以成功解码为目标 Person 结构,并适当解析非标准时间格式。
以上是如何从 JSON 解码非标准时间格式?的详细内容。更多信息请关注PHP中文网其他相关文章!