【发布时间】:2015-09-18 04:20:34
【问题描述】:
尝试 json Marshal 包含 2 个时间字段的结构。但我只希望该字段具有时间价值。所以我正在使用json:",omitempty",但它不起作用。
我可以将 Date 值设置为什么,以便 json.Marshal 将其视为空(零)值而不将其包含在 json 字符串中?
游乐场:http://play.golang.org/p/QJwh7yBJlo
实际结果:
{"时间戳":"2015-09-18T00:00:00Z","日期":"0001-01-01T00:00:00Z"}
期望的结果:
{"时间戳":"2015-09-18T00:00:00Z"}
代码:
package main
import (
"encoding/json"
"fmt"
"time"
)
type MyStruct struct {
Timestamp time.Time `json:",omitempty"`
Date time.Time `json:",omitempty"`
Field string `json:",omitempty"`
}
func main() {
ms := MyStruct{
Timestamp: time.Date(2015, 9, 18, 0, 0, 0, 0, time.UTC),
Field: "",
}
bb, err := json.Marshal(ms)
if err != nil {
panic(err)
}
fmt.Println(string(bb))
}
【问题讨论】:
-
实现目标的最简单方法可能是让 MyStruct 实现 golang.org/pkg/encoding/json/#Unmarshaler。
-
很高兴知道和很好的建议。谢谢!