第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

golang結(jié)構(gòu)體json的時(shí)間格式化解決方案

標(biāo)簽:
JQuery

最近开发项目时候发现一个结构体的Json转换的时间格式问题。

即这种1993-01-01T20:08:23.000000028+08:00 这种表示UTC方法。从我们习惯来说,更喜欢希望的是

1993-01-01 20:08:23这种格式。

重新复现代码如下:

package mainimport (    "time"    "encoding/json")type Student struct {    Name string     `json:"name"`    Brith time.Time `json:"brith"`}func main()  {    stu:=Student{        Name:"qiangmzsx",        Brith:time.Date(1993, 1, 1, 20, 8, 23, 28, time.Local),    }    b,err:=json.Marshal(stu)    if err!=nil {        println(err)    }    println(string(b))//{"name":"qiangmzsx","brith":"1993-01-01T20:08:23.000000028+08:00"}}

遇到这样的问题,那么Golang是如何解决的呢?

有两种解决方案,下面我们一个个来看看。

通过time.Time类型别名

type JsonTime time.Time// 实现它的json序列化方法func (this JsonTime) MarshalJSON() ([]byte, error) {    var stamp = fmt.Sprintf("\"%s\"", time.Time(this).Format("2006-01-02 15:04:05"))    return []byte(stamp), nil}type Student1 struct {    Name string     `json:"name"`    Brith JsonTime  `json:"brith"`}func main()  {    stu1:=Student1{        Name:"qiangmzsx",        Brith:JsonTime(time.Date(1993, 1, 1, 20, 8, 23, 28, time.Local)),    }    b1,err:=json.Marshal(stu1)    if err!=nil {        println(err)    }    println(string(b1))//{"name":"qiangmzsx","brith":"1993-01-01 20:08:23"}}

使用结构体组合方式

相较于第一种方式,该方式显得复杂一些,我也不是很推荐使用,就当做是一个扩展教程吧。

type Student2 struct {    Name string     `json:"name"`    // 一定要将json的tag设置忽略掉不解析出来    Brith time.Time  `json:"-"`}// 实现它的json序列化方法func (this Student2) MarshalJSON() ([]byte, error) {    // 定义一个该结构体的别名    type AliasStu Student2    // 定义一个新的结构体    tmpStudent:= struct {        AliasStu        Brith string `json:"brith"`    }{        AliasStu:(AliasStu)(this),        Brith:this.Brith.Format("2006-01-02 15:04:05"),    }    return json.Marshal(tmpStudent)}func main()  {    stu2:=Student2{        Name:"qiangmzsx",        Brith:time.Date(1993, 1, 1, 20, 8, 23, 28, time.Local),    }    b2,err:=json.Marshal(stu2)    if err!=nil {        println(err)    }    println(string(b2))//{"name":"qiangmzsx","brith":"1993-01-01 20:08:23"}}

该方法使用了Golang的结构体的组合方式,可以实现OOP的继承,也是体现Golang灵活。


下面把上面的代码组成整体贴出来。

package mainimport (    "time"    "encoding/json"    //"fmt"    "fmt")type Student struct {    Name string     `json:"name"`    Brith time.Time `json:"brith"`}type JsonTime time.Time// 实现它的json序列化方法func (this JsonTime) MarshalJSON() ([]byte, error) {    var stamp = fmt.Sprintf("\"%s\"", time.Time(this).Format("2006-01-02 15:04:05"))    return []byte(stamp), nil}type Student1 struct {    Name string     `json:"name"`    Brith JsonTime  `json:"brith"`}type Student2 struct {    Name string     `json:"name"`    // 一定要将json的tag设置忽略掉不解析出来    Brith time.Time  `json:"-"`}// 实现它的json序列化方法func (this Student2) MarshalJSON() ([]byte, error) {    // 定义一个该结构体的别名    type AliasStu Student2    // 定义一个新的结构体    tmpStudent:= struct {        AliasStu        Brith string `json:"brith"`    }{        AliasStu:(AliasStu)(this),        Brith:this.Brith.Format("2006-01-02 15:04:05"),    }    return json.Marshal(tmpStudent)}func main()  {    stu:=Student{        Name:"qiangmzsx",        Brith:time.Date(1993, 1, 1, 20, 8, 23, 28, time.Local),    }    b,err:=json.Marshal(stu)    if err!=nil {        println(err)    }    println(string(b))//{"name":"qiangmzsx","brith":"1993-01-01T20:08:23.000000028+08:00"}    println("===================")    stu1:=Student1{        Name:"qiangmzsx",        Brith:JsonTime(time.Date(1993, 1, 1, 20, 8, 23, 28, time.Local)),    }    b1,err:=json.Marshal(stu1)    if err!=nil {        println(err)    }    println(string(b1))//{"name":"qiangmzsx","brith":"1993-01-01 20:08:23"}    println("===================")    stu2:=Student2{        Name:"qiangmzsx",        Brith:time.Date(1993, 1, 1, 20, 8, 23, 28, time.Local),    }    b2,err:=json.Marshal(stu2)    if err!=nil {        println(err)    }    println(string(b2))//{"name":"qiangmzsx","brith":"1993-01-01 20:08:23"}}

值得一提的是,对任意struct增加  MarshalJSON ,UnmarshalJSON , String 方法,实现自定义json输出格式与打印方式。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消