登录
首页 >  Golang >  Go问答

Golang中,json转struct时,将字符串转为 time.Duration 的类型

来源:SegmentFault

时间:2023-01-08 19:15:04 496浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《Golang中,json转struct时,将字符串转为 time.Duration 的类型》,介绍一下go,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

package main

import (
    "encoding/json"
    "fmt"
    "time"
)

type Student struct {
    Id     int           `json:"id"`
    Gender string        `json:"gender"`
    Name   string        `ison:"nane"`
    Sno    string        `json:"sno"`
    Tim    time.Duration `json:"time"` // 将字符串转为 time.Duration 格式
}

func main() {
    var s1 = Student{
        Id:     12,
        Gender: "男",
        Name:   "李四",
        Sno:    "001",
        Tim:    "2s",
    }

    fmt.Printf("%#v\n", s1)
    jsonByte, _ := json.Marshal(s1)
    jsonStr := string(jsonByte)
    fmt.Printf("%v", jsonStr)
}

有人提过json包的特殊用法“,string ",测试的好像不行。

正确答案

https://golang.org/pkg/time/#...

可以看到 Duration 的定义是

type Duration int64
,直接用 int64 就好了。

type Student struct {
    Id     int           `json:"id"`
    Gender string        `json:"gender"`
    Name   string        `ison:"nane"`
    Sno    string        `json:"sno"`
    Tim    int64         `json:"time"`
}

或者可以自定义一个结构 embed time.Duration 类型,再写一个

UnmarshalJSON([]byte) error
序列化方法,但讲道理没有意义,最后用的时候还是要写一个转换
time.Duration(Duration)
。我推荐上一种用法。

type MyDuration struct {
    time.Duration
}

func (d *MyDuration) UnmarshalJSON(data []byte) error {
   ...
}

type Student struct {
    Id     int           `json:"id"`
    Gender string        `json:"gender"`
    Name   string        `ison:"nane"`
    Sno    string        `json:"sno"`
    Tim    MyDuration    `json:"time"` // 将字符串转为 time.Duration 格式
}

可以参考下下面这个爆栈的讨论。

https://stackoverflow.com/que...

以上就是《Golang中,json转struct时,将字符串转为 time.Duration 的类型》的详细内容,更多关于golang的资料请关注golang学习网公众号!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>