Gibt es in Golang eine Möglichkeit, den generischen encoding/json
Marshal dazu zu bringen, beim Marshalling der time.Time
-Felder ein anderes Layout zu verwenden?
Grundsätzlich habe ich diese Struktur:
%Vor% und ich möchte mit encdoding/json
's Marshal
-Funktion in json codieren, aber ich möchte mein benutzerdefiniertes Layout verwenden, ich stelle mir vor, dass time.Format(layout)
aufgerufen wird, ich möchte dieses Layout steuern,
Wie von zeebo's Antwort inspiriert und in den Kommentaren zu dieser Antwort herausgearbeitet:
%Vor%Diese Lösung bettet die time.Time in die jsonTime-Struktur ein. Die Einbettung fördert die gesamte Zeit. Die Methoden von Time zur jsonTime-Struktur, die ihre Verwendung ohne explizite Typkonvertierung ermöglicht (siehe // 1).
Das Einbetten einer time.Time hat den Nachteil, dass sie auch die MarshalJSON-Methode unterstützt, die aus Gründen der Abwärtskompatibilität den Code für die Codierung / json marshalling höher priorisiert als die MarshalText-Methode (MarshalText wurde in Go 1.2 hinzugefügt , MarshalJSON ist älter als das). Daher wird das standardmäßige time.Time-Format anstelle eines von MarshalText bereitgestellten benutzerdefinierten Formats verwendet.
Um dieses Problem zu überwinden, überschreiben wir MarshalJSON für die jsonTime-Struktur.
Erstens empfehle ich dringend, ein anderes Zeitformat als das Standard-RFC3339 zu verwenden. Es ist ein gutes Zeitformat und kann von jeder Anzahl von Sprachen analysiert werden. Wenn Sie also kein anderes Format benötigen, weil die API eines anderen benötigt, ist es wahrscheinlich das Beste, den Standard zu verwenden.
Aber ich musste dieses Problem lösen, indem ich die APIs anderer Leute konsumierte. Hier ist eine Lösung, die den Großteil der Arbeit in den Marshal / Unmarshal-Schritt verlagert und eine ideale Struktur hinterlässt: Ссылка
Tags und Links json go marshalling time