2つの時間フィールドを含む構造体をjsonにマーシャリングしようとしています。しかし、私は時間価値がある場合にだけフィールドが来るようにしたい。だから私はjson:",omitempty"
を使用していますが、動作していません。Golang JSON omitempty with time.Timeフィールド
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))
}
この機能は[time.Timeで動作しません](https://github.com/golang/go/blob/1fd78e1f600d10475b85381427bda9f14f86e0f0/src/encoding/json/encode.go#L278-L294)。 –
おそらく最も簡単な方法は、MyStructにhttp://golang.org/pkg/encoding/json/#Unmarshalerを実装させることです。 – Volker
よく知っていると良いアドバイス。ありがとう! –