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
DDDOriginal
2024-11-16 14:48:02461Durchsuche

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"
}

Und die gewünschte Go-Struktur:

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

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

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))
}

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"))

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!

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