我的代码类似于以下
package main
import (
"fmt"
"time"
"encoding/json"
)
type Message struct {
Time time.Time `json:"timestamp,omitempty"`
}
func main() {
t, _ := time.Parse("2006-01-02T15:04:05.999Z07:00", "2017-05-01T15:04:05.630Z")
msg := Message{
Time: t,
}
bs, _ := json.Marshal(msg)
fmt.Println(string(bs[:]))
}
打印
{"timestamp":"2017-05-01T15:04:05.63Z"}
如何让json编组保持尾随0?即,打印这个?
{"timestamp":"2017-05-01T15:04:05.630Z"}
编辑:
答案 0 :(得分:2)
time.Time总是编组到RFC 3339,只包括亚秒级精度(如果存在):https://golang.org/pkg/time/#Time.MarshalJSON
您可以使用命名的time.Time类型编写自己的自定义版本,也可以为结构定义自定义编组函数,或者可以使结构在该位置保留字符串。在任何情况下,如果要使用相同的格式,但包括尾随零,则需要使用RFC3339Nano常量的修改版本。
它的值是:"2006-01-02T15:04:05.999999999Z07:00"
。
最后的9表示“包括直到最右边的非零值,在此之后省略”。如果将这些9改为0,它将始终包含它们。例如,如果你总是想要毫秒精度(之后没有任何内容,无论它是否为非零),你都会使用:
"2006-01-02T15:04:05.000Z07:00"
如果你在time.Time值上输入Format(),你就会得到你想要的字符串,因此可以把它包含在JSON中。