Maison >développement back-end >Golang >Comment personnaliser les formats horaires JSON non standard dans Go ?

Comment personnaliser les formats horaires JSON non standard dans Go ?

DDD
DDDoriginal
2024-11-16 14:48:02461parcourir

How to Custom Unmarshal Non-Standard JSON Time Formats in Go?

Désactivation/Marshaling personnalisé pour les formats d'heure JSON non standard

Lorsque vous traitez des données JSON contenant des valeurs d'heure dans des formats non standard, le décodeur JSON intégré peut rencontrer des erreurs. Pour gérer de telles situations, des fonctions de marshal et de démarshal personnalisées peuvent être implémentées.

Considérez le JSON suivant :

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

Et la structure Go souhaitée :

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

Utilisation le décodeur JSON standard entraînerait une erreur lors de l'analyse du champ "birth_date". Pour personnaliser ce comportement, un alias de type peut être créé et ajouté à la structure :

type JsonBirthDate time.Time

Ensuite, des fonctions de marshal et de démarshal personnalisées sont implémentées :

func (j *JsonBirthDate) UnmarshalJSON(b []byte) error {
    s := strings.Trim(string(b), `"`) // Remove quotes
    t, err := time.Parse("2006-01-02", s)
    if err != nil {
        return err
    }
    *j = JsonBirthDate(t)
    return nil
}

func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

Avec ces fonctions personnalisées, le JSON peut maintenant être décodé dans la structure Go comme prévu :

person := Person{}

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

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

// Print the birth date using the Format function
fmt.Println(person.BirthDate.Format("2006-01-02"))

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