Heim >Backend-Entwicklung >Golang >Wie analysiere ich nicht standardmäßige Zeitformate von JSON in Golang?

Wie analysiere ich nicht standardmäßige Zeitformate von JSON in Golang?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-09 03:23:01912Durchsuche

How to Parse Non-Standard Time Formats from JSON in Golang?

Parsen eines nicht standardmäßigen Zeitformats aus JSON

Beim Dekodieren von JSON-Daten in eine benutzerdefinierte Struktur können Inkonsistenzen in den Datumsformaten auftreten. Um dieses Problem zu beheben, bietet Golang die Möglichkeit, benutzerdefinierte Marshal- und Unmarshal-Funktionen zu implementieren.

Benutzerdefinierte Marshaler- und Unmarshaler-Funktionen

Um ein benutzerdefiniertes Parsing-Format anzugeben, ist ein Typalias für das Zeitfeld erstellt und die Marshaler- und Unmarshaler-Schnittstellen werden als implementiert folgt:

type JsonBirthDate time.Time

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

// MarshalJSON converts a time value to a JSON string.
func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

Diese benutzerdefinierte Logik prüft, ob der JSON-Wert im gewünschten Format vorliegt und analysiert ihn entsprechend.

Aktualisierte Struktur und Analyse

Die Struktur wird aktualisiert, um den benutzerdefinierten Typ zu verwenden, und die Dekodierung kann wie folgt erfolgen üblich:

type Person struct {
    Name string `json:"name"`
    BirthDate JsonBirthDate `json:"birth_date"`
}

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

Zusätzliche Funktionen

Der Einfachheit halber kann eine Format-Methode hinzugefügt werden, um eine formatierte Darstellung des Datums bereitzustellen:

// Format prints the date using the specified format string.
func (j JsonBirthDate) Format(s string) string {
    t := time.Time(j)
    return t.Format(s)
}

Dieser benutzerdefinierte Marshalling- und Unmarshaling-Ansatz ermöglicht ein flexibles Parsen von Zeitwerten aus JSON, selbst wenn diese von Standardformaten abweichen.

Das obige ist der detaillierte Inhalt vonWie analysiere ich nicht standardmäßige Zeitformate von JSON in Golang?. 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