Maison > développement back-end > Golang > le corps du texte

Comment personnaliser les formats horaires JSON non standard dans Go ?

DDD
Libérer: 2024-11-16 14:48:02
original
393 Les gens l'ont consulté

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"
}
Copier après la connexion

Et la structure Go souhaitée :

type Person struct {
    Name string `json:"name"`
    BirthDate time.Time `json:"birth_date"`
}
Copier après la connexion

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
Copier après la connexion

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))
}
Copier après la connexion

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"))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal