gpt4 book ai didi

json - 时间 JSON 编码为 0 时间

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:31 34 4
gpt4 key购买 nike

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

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 转换中会丢失这种信息?如何防止这种情况?谢谢。

最佳答案

Go vet 会告诉您到底是什么问题:

./prog.go:18:16: call of Unmarshal passes non-pointer as second argument

同时永远不要忽略错误!您至少可以打印它:

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}

关于json - 时间 JSON 编码为 0 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56218468/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com