"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-09
Parcourir:582

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 marshal et de démarshaler personnalisées

Pour spécifier un format d'analyse personnalisé, un alias de type est créé pour le champ time, 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 dans le format souhaité et l'analyse en conséquence.

Structure et analyse mises à jour

La structure est mis à 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 personnalisée de marshaling et de démarshaling permet une analyse flexible des valeurs temporelles de JSON même lorsqu'elles s'écartent des formats standard.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3