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

Comment décoder les formats d'heure non standard à partir de JSON ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-08 20:41:021010parcourir

How to Decode Non-Standard Time Formats from JSON?

Décodage des formats d'heure non standard à partir de JSON

Lorsque vous traitez des données JSON contenant des formats d'heure non standard, le décodage JSON standard peut rencontrer problèmes car il s’attend à des modèles de format d’heure spécifiques. Pour surmonter ce problème, des fonctions de marshal et de démarshal personnalisées peuvent être implémentées.

Par exemple, considérons le JSON suivant :

{
    "name": "John",
    "birth_date": "1996-10-07"
}

Supposons que nous voulions décoder cela dans une structure Person :

type Person struct {
    Name string `json:"name"`
    BirthDate time.Time `json:"birth_date"`
}

Utilisation du décodeur JSON standard :

person := Person{}

decoder := json.NewDecoder(req.Body);

if err := decoder.Decode(&person); err != nil {
    log.Println(err)
}

conduit à un erreur, car le décodeur ne peut pas analyser le format d'heure non standard. Pour résoudre ce problème, nous pouvons créer un alias de type personnalisé pour la valeur temporelle et implémenter des fonctions de marshal et de démarshal personnalisées.

Un exemple d'implémentation pourrait être :

// Type alias
type JsonBirthDate time.Time

// Implement UnmarshalJSON
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
func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

// Example use in struct
type Person struct {
    Name string `json:"name"`
    BirthDate JsonBirthDate `json:"birth_date"`
}

Avec ces fonctions personnalisées, le Les données JSON peuvent désormais être décodées avec succès dans la structure Person cible, avec le format d'heure non standard analysé de manière appropriée.

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