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

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

Mary-Kate Olsen
发布: 2024-11-08 20:41:02
原创
1024 人浏览过

How to Decode Non-Standard Time Formats from JSON?

从 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板