要将非标准时间格式的 JSON 解码为自定义结构,内置的编组和解组函数提供了灵活性。
考虑以下 JSON:
{ "name": "John", "birth_date": "1996-10-07" }
以及用于保存数据的自定义结构:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
使用默认解码器解码此 JSON 会失败,因为非- 标准时间格式。要处理此问题,请实现自定义编组和解组函数:
type JsonBirthDate 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 } func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
通过将 JsonBirthDate 添加到 Person 结构并实现这些函数,以下代码将正确解码 JSON:
person := Person{} decoder := json.NewDecoder(req.Body) err := decoder.Decode(&person) if err != nil { log.Println(err) } // person.BirthDate now contains the parsed time as a time.Time object
以上是如何解码非标准时间格式的 JSON?的详细内容。更多信息请关注PHP中文网其他相关文章!