Maison >développement back-end >Golang >Comment gérer les formats d'heure non standard dans l'analyse JSON ?

Comment gérer les formats d'heure non standard dans l'analyse JSON ?

DDD
DDDoriginal
2024-11-09 05:03:02413parcourir

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

Analyse des formats d'heure non standard en JSON

Dans les scénarios d'analyse JSON typiques, les valeurs de temps doivent adhérer au format RFC 3339 ("2006-01-02T15 :04:05Z07:00"). Cependant, lorsqu'il s'agit de formats d'heure non standard, le décodeur JSON par défaut rencontre des problèmes.

Pour surmonter ce problème, on peut implémenter des méthodes de marshal et de démarshal personnalisées pour un type de données personnalisé qui représente le format d'heure non standard. Par exemple :

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

Maintenant, intégrez ce type personnalisé dans la structure Person :

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

En utilisant ces méthodes personnalisées, le décodeur JSON peut désormais analyser avec succès l'heure non standard format :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn