go / intermediate
Snippet
Implementierung benutzerdefinierter JSON-Serialisierung für Datumsfelder
Standardmäßig formatiert Gos json.Marshal Typen nach Standard-Serialisierungsregeln. Durch die Implementierung des json.Marshaler-Interfaces (Definieren einer MarshalJSON() ([]byte, error)-Methode) können Sie genau anpassen, wie ein Typ in JSON dargestellt wird, was für benutzerdefinierte Datumsformate, Maskierung sensibler Felder oder Strukturänderungen nützlich ist.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package mainimport ("encoding/json""fmt""time")type CustomDate time.Timefunc (cd CustomDate) MarshalJSON() ([]byte, error) {formatted := fmt.Sprintf("\"%s\"", time.Time(cd).Format("2006-01-02"))return []byte(formatted), nil}type Event struct {Name string `json:"name"`Date CustomDate `json:"date"`}func main() {evt := Event{Name: "Gala Concert",Date: CustomDate(time.Date(2026, 7, 5, 0, 0, 0, 0, time.UTC)),}data, _ := json.Marshal(evt)fmt.Println(string(data))}
Erklärung
1
type CustomDate time.Time
Erstellt einen benutzerdefinierten Typ basierend auf time.Time, um das globale Verhalten von time.Time nicht zu ändern.
2
func (cd CustomDate) MarshalJSON() ([]byte, error) {
Implementiert das json.Marshaler-Interface, um die Standard-Serialisierung für CustomDate zu überschreiben.
3
formatted := fmt.Sprintf("\"%s\"", time.Time(cd).Format("2006-01-02"))
Formatiert die Zeit als YYYY-MM-DD String, eingeschlossen in JSON-Anführungszeichen.
4
data, _ := json.Marshal(evt)
Serialisiert das Event-Struct und ruft dabei automatisch MarshalJSON für das Feld Date auf.