„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie analysiere ich nicht standardmäßige Zeitformate von JSON in Golang?

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

Veröffentlicht am 09.11.2024
Durchsuche:748

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 dies 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 wie folgt implementiert:

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 ist aktualisiert, um den benutzerdefinierten Typ zu verwenden, und die Dekodierung kann wie gewohnt erfolgen:

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 eine flexible Analyse von Zeitwerten aus JSON, selbst wenn diese von Standardformaten abweichen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3