Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehe ich mit nicht standardmäßigen Zeitformaten beim JSON-Parsing um?

Wie gehe ich mit nicht standardmäßigen Zeitformaten beim JSON-Parsing um?

DDD
DDDOriginal
2024-11-09 05:03:02357Durchsuche

How to Handle Non-Standard Time Formats in JSON Parsing?

Parsing nicht standardmäßiger Zeitformate in JSON

In typischen JSON-Parsing-Szenarien wird erwartet, dass Zeitwerte dem RFC 3339-Format („2006-01-02T15 :04:05Z07:00"). Beim Umgang mit nicht standardmäßigen Zeitformaten stößt der Standard-JSON-Decoder jedoch auf Probleme.

Um dieses Problem zu lösen, können benutzerdefinierte Marshall- und Unmarshal-Methoden für einen benutzerdefinierten Datentyp implementiert werden, der das nicht standardmäßige Zeitformat darstellt. Zum Beispiel:

// Create a type alias for the non-standard time format
type JsonBirthDate time.Time

// Implement UnmarshalJSON to handle conversion from JSON string to time.Time
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
}

// Implement MarshalJSON to handle conversion from time.Time to JSON string
func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

Jetzt diesen benutzerdefinierten Typ in die Person-Struktur integrieren:

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

Durch die Verwendung dieser benutzerdefinierten Methoden kann der JSON-Decoder nun die nicht standardmäßige Zeit erfolgreich analysieren Format:

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

Das obige ist der detaillierte Inhalt vonWie gehe ich mit nicht standardmäßigen Zeitformaten beim JSON-Parsing um?. 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