Heim > Backend-Entwicklung > Golang > Wie kann ich nicht standardmäßige JSON-Zeitformate in Go benutzerdefiniert entmarshalieren?

Wie kann ich nicht standardmäßige JSON-Zeitformate in Go benutzerdefiniert entmarshalieren?

DDD
Freigeben: 2024-11-16 14:48:02
Original
466 Leute haben es durchsucht

How to Custom Unmarshal Non-Standard JSON Time Formats in Go?

Benutzerdefiniertes Un/Marshaling für nicht standardmäßige JSON-Zeitformate

Beim Umgang mit JSON-Daten, die Zeitwerte in nicht standardmäßigen Formaten enthalten, Beim integrierten JSON-Decoder können Fehler auftreten. Um solche Situationen zu bewältigen, können benutzerdefinierte Marshall- und Unmarshal-Funktionen implementiert werden.

Berücksichtigen Sie den folgenden JSON:

{
    "name": "John",
    "birth_date": "1996-10-07"
}
Nach dem Login kopieren

Und die gewünschte Go-Struktur:

type Person struct {
    Name string `json:"name"`
    BirthDate time.Time `json:"birth_date"`
}
Nach dem Login kopieren

Using Der Standard-JSON-Decoder würde beim Parsen des Felds „birth_date“ zu einem Fehler führen. Um dieses Verhalten anzupassen, kann ein Typalias erstellt und der Struktur hinzugefügt werden:

type JsonBirthDate time.Time
Nach dem Login kopieren

Dann werden benutzerdefinierte Marshall- und Unmarshal-Funktionen implementiert:

func (j *JsonBirthDate) UnmarshalJSON(b []byte) error {
    s := strings.Trim(string(b), `"`) // Remove quotes
    t, err := time.Parse("2006-01-02", s)
    if err != nil {
        return err
    }
    *j = JsonBirthDate(t)
    return nil
}

func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}
Nach dem Login kopieren

Mit diesen benutzerdefinierten Funktionen Der JSON kann nun wie vorgesehen in die Go-Struktur dekodiert werden:

person := Person{}

decoder := json.NewDecoder(req.Body);

if err := decoder.Decode(&person); err != nil {
    log.Println(err)
}

// Print the birth date using the Format function
fmt.Println(person.BirthDate.Format("2006-01-02"))
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich nicht standardmäßige JSON-Zeitformate in Go benutzerdefiniert entmarshalieren?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage