在典型的 JSON 解析场景中,时间值应遵循 RFC 3339 格式(“2006-01-02T15”) :04:05Z07:00")。但是,在处理非标准时间格式时,默认的 JSON 解码器会遇到问题。
为了克服这一问题,可以为表示非标准时间格式的自定义数据类型实现自定义编组和解组方法。例如:
// Create a type alias for the non-standard time format type JsonBirthDate time.Time // Implement UnmarshalJSON to handle conversion from JSON string to time.Time 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 to handle conversion from time.Time to JSON string func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
现在,将此自定义类型合并到 Person 结构中:
type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` }
通过利用这些自定义方法,JSON 解码器现在可以成功解析非标准时间格式:
person := Person{} decoder := json.NewDecoder(req.Body) if err := decoder.Decode(&person); err != nil { log.Println(err) }
以上是JSON解析中如何处理非标准时间格式?的详细内容。更多信息请关注PHP中文网其他相关文章!