首页  >  文章  >  后端开发  >  如何解码非标准时间格式的 JSON?

如何解码非标准时间格式的 JSON?

Patricia Arquette
Patricia Arquette原创
2024-11-09 08:37:02660浏览

How to Decode JSON with Non-Standard Time Formats?

非标准 JSON 时间格式的自定义解组

要将非标准时间格式的 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn