我有类似于以下的代码
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[:]))
}
Run Code Online (Sandbox Code Playgroud)
这打印
{"timestamp":"2017-05-01T15:04:05.63Z"}
Run Code Online (Sandbox Code Playgroud)
如何让 json 编组保留尾随 0?即,打印这个?
{"timestamp":"2017-05-01T15:04:05.630Z"}
Run Code Online (Sandbox Code Playgroud)
编辑:
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 中。
功能示例: https: //play.golang.org/p/oqwnma6odw
| 归档时间: |
|
| 查看次数: |
1926 次 |
| 最近记录: |