登录
首页 >  Golang >  Go教程

Go语言JSON字符串转time.Duration:超详细教程

时间:2025-03-08 17:36:26 423浏览 收藏

Go语言中如何将JSON字符串转换为time.Duration类型?本文详细介绍了在Go语言中将JSON字符串(例如"2s")转换为time.Duration类型的方法。由于JSON库无法直接将字符串解析为time.Duration,文章推荐了一种高效的解决方法:在结构体中使用int64作为中间类型接收JSON数据,再通过代码将int64转换为time.Duration,并根据时间单位(如秒、毫秒)进行相应的乘法运算。相比自定义UnmarshalJSON方法,这种方法更简洁高效。 学习本方法,轻松解决Go语言JSON解析中的时间类型转换难题。

Go语言中JSON字符串到time.Duration类型的转换详解

本文探讨如何在Go语言中将JSON字符串转换为time.Duration类型。 问题在于JSON数据中时间持续时间通常以字符串形式表示(例如“2s”),而time.Duration的底层类型是int64(纳秒数)。 直接使用json.Unmarshal会失败。

Go语言中如何将JSON字符串转换为time.Duration类型?

最直接高效的解决方法是修改结构体字段类型。 将time.Duration类型字段改为int64,让json.Unmarshal将字符串解析为数字,然后在代码中进行转换:

type student struct {
    id     int    `json:"id"`
    gender string `json:"gender"`
    name   string `json:"name"`
    sno    string `json:"sno"`
    tim    int64  `json:"time"` // 使用int64作为中间类型
}

func main() {
    jsonData := []byte(`{"id":1,"gender":"male","name":"张三","sno":"202301","time":"2s"}`)
    var s1 student
    err := json.Unmarshal(jsonData, &s1)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    duration := time.Duration(s1.tim) * time.Second // 注意需要乘以合适的单位
    fmt.Println("Duration:", duration)
}

注意: 由于tim字段存储的是纳秒数,在转换为time.Duration时,需要根据JSON字符串中时间的单位(例如“s”表示秒,“ms”表示毫秒)进行相应的乘法运算。 上面的例子假设JSON字符串中的时间单位是秒。

自定义UnmarshalJSON方法虽然可行,但增加了代码复杂度,并且最终仍需进行类型转换,因此除非处理多种时间格式的字符串,否则直接使用int64作为中间类型是最简洁高效的方案。

理论要掌握,实操不能落!以上关于《Go语言JSON字符串转time.Duration:超详细教程》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>