首页 >后端开发 >Golang >如何在 Golang 中解析 JSON 中的非标准时间格式?

如何在 Golang 中解析 JSON 中的非标准时间格式?

Patricia Arquette
Patricia Arquette原创
2024-11-09 03:23:01915浏览

How to Parse Non-Standard Time Formats from JSON in Golang?

从 JSON 解析非标准时间格式

将 JSON 数据解码为自定义结构时,可能会出现日期格式不一致的情况。为了解决这个问题,Golang 提供了实现自定义编组和解组函数的选项。

自定义编组器和解组器函数

要指定自定义解析格式,类型别名为为时间字段创建,Marshaler 和 Unmarshaler 接口实现如下:

type JsonBirthDate time.Time

// UnmarshalJSON translates a JSON string to a time value.
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
}

// MarshalJSON converts a time value to a JSON string.
func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

此自定义逻辑检查 JSON 值是否为所需格式并相应地对其进行解析。

更新了结构和解析

结构体已更新为使用自定义类型,并且解码可以照常进行:

type Person struct {
    Name string `json:"name"`
    BirthDate JsonBirthDate `json:"birth_date"`
}

decoder := json.NewDecoder(req.Body)
if err := decoder.Decode(&person); err != nil {
    log.Println(err)
}

其他功能

为了方便起见,可以添加 Format 方法来提供日期的格式化表示:

// Format prints the date using the specified format string.
func (j JsonBirthDate) Format(s string) string {
    t := time.Time(j)
    return t.Format(s)
}

这种自定义编组和解组方法允许灵活地解析 JSON 中的时间值,即使在它们偏离标准格式。

以上是如何在 Golang 中解析 JSON 中的非标准时间格式?的详细内容。更多信息请关注PHP中文网其他相关文章!

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