Wie passt man das JSON-Layout für time.Time-Felder in Golang an?

Susan Sarandon
Freigeben: 2024-11-01 08:42:02
Original
676 Leute haben es durchsucht

How to Customize the JSON Layout for time.Time Fields in Golang?

Anpassen des JSON-Layouts für time.Time in Golang

In Golang wird die Funktion „encoding/json.Marshal“ häufig zum Konvertieren von Objekten in JSON verwendet. Unter den Standardeinstellungen stimmt es jedoch möglicherweise nicht mit dem gewünschten JSON-Layout überein. Dieser Artikel veranschaulicht eine Lösung zum Überschreiben des Standardlayouts und zum Anpassen des Formats, das von time.Time-Feldern während des JSON-Marshallings verwendet wird.

Angenommen, Sie haben eine Struktur s mit einem time.Time-Feld namens starttime. Beim Marshallen dieser Struktur in JSON möchten Sie ein bestimmtes benutzerdefiniertes Layout verwenden.

s := {"starttime":time.Now(), "name":"ali"}
Nach dem Login kopieren

Um dies zu erreichen, können wir einen benutzerdefinierten Typ erstellen, der time.Time einbettet und sowohl die MarshalText- als auch die MarshalJSON-Methode überschreibt.

<code class="go">import "fmt"
import "time"
import "encoding/json"

type jsonTime struct {
    time.Time
    f string
}

func (j jsonTime) format() string {
    return j.Time.Format(j.f)
}

func (j jsonTime) MarshalText() ([]byte, error) {
    return []byte(j.format()), nil
}

func (j jsonTime) MarshalJSON() ([]byte, error) {
    return []byte(`"` + j.format() + `"`), nil
}</code>
Nach dem Login kopieren

Durch das Überschreiben von MarshalText steuern wir, wie der jsonTime-Typ seinen Wert in eine Textform umwandelt, sodass wir das benutzerdefinierte Layout angeben können. Darüber hinaus stellen wir durch das Überschreiben von MarshalJSON sicher, dass die überschriebene Methode anstelle der integrierten time.Time-Implementierung für das JSON-Marshalling verwendet wird.

Mit dem benutzerdefinierten jsonTime-Typ können Sie jetzt Ihre S-Struktur mit dem gewünschten Layout Marshallen :

<code class="go">jt := jsonTime{time.Now(), time.Kitchen}
x := map[string]interface{}{
    "foo": jt,
    "bar": "baz",
}
data, err := json.Marshal(x)
if err != nil {
    panic(err)
}</code>
Nach dem Login kopieren

Dadurch wird eine JSON-Zeichenfolge mit dem Startzeitfeld erzeugt, das entsprechend dem time.Kitchen-Layout formatiert ist.

Das obige ist der detaillierte Inhalt vonWie passt man das JSON-Layout für time.Time-Felder in Golang an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!