猿问

时间 JSON 编组为 0 时间

我有以下代码,主要编组和取消编组时间结构。这是代码


package main


import (

    "fmt"

    "time"

    "encoding/json"

)


type check struct{

    A time.Time `json:"a"`

}


func main(){

    ds := check{A:time.Now().Truncate(0)}

    fmt.Println(ds)

    dd, _ := json.Marshal(ds)

    d2 := check {}

    json.Unmarshal(dd, d2)

    fmt.Println(d2)

}

这是它产生的输出


{2019-05-20 15:20:16.247914 +0530 IST}

{0001-01-01 00:00:00 +0000 UTC}

第一行是原始时间,第二行是解组后的时间。为什么我们会因转换而丢失这种信息JSON?如何防止这种情况?谢谢。


慕莱坞森
浏览 144回答 1
1回答

largeQ

Go vet 会准确告诉您问题出在哪里:./prog.go:18:16: Unmarshal 的调用将非指针作为第二个参数传递也永远不要忽略错误!您至少可以打印它:ds := check{A: time.Now().Truncate(0)}fmt.Println(ds)dd, err := json.Marshal(ds)fmt.Println(err)d2 := check{}err = json.Unmarshal(dd, d2)fmt.Println(err)fmt.Println(d2)这将输出(在Go Playground上尝试):{2009-11-10 23:00:00 +0000 UTC}<nil>json: Unmarshal(non-pointer main.check){0001-01-01 00:00:00 +0000 UTC}您必须传递一个指针才能json.Unmarshal()将其解组为(更改)您的值:err = json.Unmarshal(dd, &d2)使用此更改输出将是(在Go Playground上尝试):{2009-11-10 23:00:00 +0000 UTC} <nil> <nil> {2009-11-10 23:00:00 +0000 UTC}
随时随地看视频慕课网APP

相关分类

Go
我要回答