Попытка json Marshal создать структуру, содержащую 2 поля времени. Но я хочу, чтобы поле получилось, если оно имеет значение времени. Поэтому я использую json:",omitempty"
, но он не работает.Golang JSON omitempty С тегом 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))
}
Функция [не работает со временем. Время] (https://github.com/golang/go/blob/1fd78e1f600d10475b85381427bda9f14f86e0f0/src/encoding/json/encode.go#L278-L294). –
Возможно, самым простым способом для вашей цели было бы позволить MyStruct реализовать http://golang.org/pkg/encoding/json/#Unmarshaler. – Volker
Полезно знать и хороший совет. Благодаря! –