Maison > développement back-end > Golang > Comment gérer les valeurs SQL NULL dans JSON à l'aide des conversions de type Go ?

Comment gérer les valeurs SQL NULL dans JSON à l'aide des conversions de type Go ?

Susan Sarandon
Libérer: 2024-12-22 01:31:18
original
310 Les gens l'ont consulté

How to Handle SQL NULL Values in JSON using Go Type Conversions?

Gestion JSON des valeurs SQL NULL avec les conversions de type Go

Alors que les types Go comme Int64 et String ne peuvent pas stocker de valeurs nulles, en utilisant sql.NullInt64 et sql.NullString permet cette fonctionnalité. Cependant, l'encodage de ces types au format JSON à l'aide du package json entraîne un format modifié par rapport aux types Int64 et String classiques.

Cette divergence se produit car les types sql.Null* sont eux-mêmes des structures, ce qui provoque un niveau supplémentaire d'imbrication dans la représentation JSON. Pour surmonter ce problème, on peut implémenter des types personnalisés adhérant aux interfaces json.Marshaller et json.Unmarshaler.

Par exemple, le type JsonNullInt64 peut être défini, intégrant le type sql.NullInt64 et implémentant une gestion JSON personnalisée :

type JsonNullInt64 struct {
    sql.NullInt64
}

func (v JsonNullInt64) MarshalJSON() ([]byte, error) {
    if v.Valid {
        return json.Marshal(v.Int64)
    } else {
        return json.Marshal(nil)
    }
}

func (v *JsonNullInt64) UnmarshalJSON(data []byte) error {
    // Pointer unmarshalling ensures NULL detection
    var x *int64
    if err := json.Unmarshal(data, &x); err != nil {
        return err
    }
    if x != nil {
        v.Valid = true
        v.Int64 = *x
    } else {
        v.Valid = false
    }
    return nil
}
Copier après la connexion

Remplacer sql.NullInt64 par JsonNullInt64 aboutit au codage JSON souhaité. Pour des tests plus approfondis, reportez-vous à ce terrain de jeu : http://play.golang.org/p/zFESxLcd-c

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal