Maison >développement back-end >Golang >Comment analyser les formats d'heure non standard à partir de JSON dans Golang ?

Comment analyser les formats d'heure non standard à partir de JSON dans Golang ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-09 03:23:01931parcourir

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

Analyse du format d'heure non standard à partir de JSON

Lors du décodage des données JSON dans une structure personnalisée, des incohérences dans les formats de date peuvent survenir. Pour résoudre ce problème, Golang offre la possibilité d'implémenter des fonctions de marshal et de démarshal personnalisées.

Fonctions de marshaler et de démarshaler personnalisées

Pour spécifier un format d'analyse personnalisé, un alias de type est créé pour le champ horaire, et les interfaces Marshaler et Unmarshaler sont implémentées comme suit :

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

Cette logique personnalisée vérifie si la valeur JSON est au format souhaité et l'analyse en conséquence.

Structure et analyse mises à jour

La structure est mise à jour pour utiliser le type personnalisé, et le décodage peut se dérouler comme d'habitude :

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

Fonctionnalités supplémentaires

Pour plus de commodité, une méthode Format peut être ajoutée pour fournir une représentation formatée de la date :

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

Cette approche de marshaling et de démarshaling personnalisée permet une analyse flexible des valeurs de temps à partir de JSON même lorsque ils s'écartent des formats standards.

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