Heim >Backend-Entwicklung >Golang >Wie gehe ich mit „json:'omitempty'' mit „time.Time'-Feldern in Go um?

Wie gehe ich mit „json:'omitempty'' mit „time.Time'-Feldern in Go um?

Barbara Streisand
Barbara StreisandOriginal
2024-12-30 21:29:141047Durchsuche

How to Handle `json:

JSON omitempty with time.Time Field

In Go können Sie mit der Annotation „json,omitempty“ Felder mit leeren Werten aus JSON ausschließen Serialisierung funktioniert jedoch nicht mit time.Time-Feldern, da diese einen Nullwert haben, der als gültig gilt Datum.

Um dieses Problem zu beheben, setzen Sie das Feld time.Time auf time.Time{}, anstatt es auf einem Nullwert zu belassen. Dadurch wird der JSON-Encoder angewiesen, das Feld als leer zu behandeln.

Betrachten Sie das folgende Beispiel:

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),
        Date:      time.Time{},
        Field:     "",
    }

    bb, err := json.Marshal(ms)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(bb))
}

Ausgabe:

{"Timestamp":"2015-09-18T00:00:00Z"}

Alternativ können Sie einen Zeiger verwenden auf time.Time und setzen Sie es auf Null, um den gleichen Effekt zu erzielen:

type MyStruct struct {
    Timestamp *time.Time `json:",omitempty"`
    Date      *time.Time `json:",omitempty"`
    Field     string    `json:",omitempty"`
}

Das obige ist der detaillierte Inhalt vonWie gehe ich mit „json:'omitempty'' mit „time.Time'-Feldern in Go um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn