Versuch, Marshall eine Struktur, die 2 Zeitfelder enthält. Aber ich möchte nur, dass das Feld durchkommt, wenn es einen Zeitwert hat. Ich verwende also json:",omitempty"
, aber es funktioniert nicht.Golang JSON omitemperty Mit time.Time Feld
Was kann ich den Date-Wert auf so json.Marshal wird es wie ein leerer (Null) Wert behandeln und nicht in der JSON-String enthalten?
Spielplatz: http://play.golang.org/p/QJwh7yBJlo
tatsächliches Ergebnis:
{ "Timestamp": "2015-09-18T00: 00: 00Z", "Datum": "0001-01-01T00: 00: 00Z "}
erwünschtes Ergebnis:
{ "Timestamp": "2015-09-18T00: 00: 00Z"}
Code:
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))
}
Die Funktion [funktioniert nicht mit time.Time] (https://github.com/golang/go/blob/1fd78e1f600d10475b85381427bda9f14f86e0f0/src/encoding/json/encode.go#L278-L294). –
Der einfachste Weg zu Ihrem Ziel wäre es, MyStruct http://golang.org/pkg/encoding/json/#Unmarshaler implementieren zu lassen. – Volker
Gut zu wissen und guter Rat. Vielen Dank! –