Maison > développement back-end > Golang > Comment aplatir la sortie JSON sql.NullString dans Go ?

Comment aplatir la sortie JSON sql.NullString dans Go ?

Patricia Arquette
Libérer: 2024-12-03 00:19:12
original
984 Les gens l'ont consulté

How to Flatten sql.NullString JSON Output in Go?

Marshaling personnalisé pour la sortie sql.NullString aplatie

Lors du marshalling d'un champ sql.NullString dans une structure Go à l'aide de json.Marshal, la valeur par défaut la sortie inclut des métadonnées supplémentaires telles que les champs Valide et Chaîne. Ce comportement peut ne pas être souhaité dans certains scénarios où la valeur aplatie est préférée.

Considérez la structure suivante :

type Company struct {
    ID   int             `json:"id"`              
    Abn  sql.NullString  `json:"abn,string"`
}
Copier après la connexion

Lors du marshaling de cette structure, le résultat ressemblera à ce qui suit :

{
    "id": "68",
    "abn": {
        "String": "SomeABN",
        "Valid": true
    }
}
Copier après la connexion

Cependant, le résultat souhaité est une version aplatie avec juste le value :

{
    "id": "68",
    "abn": "SomeABN"
}
Copier après la connexion
Copier après la connexion

Implémentation de Marshaller personnalisée

Pour y parvenir, il est nécessaire d'implémenter un type personnalisé qui embarque sql.NullString et implémente l'interface json.Marshaler . Ce type personnalisé peut définir son propre comportement de marshalling via la méthode MarshalJSON.

Voici un exemple :

type MyNullString struct {
    sql.NullString
}

func (s MyNullString) MarshalJSON() ([]byte, error) {
    if s.Valid {
        return json.Marshal(s.String)
    }
    return []byte(`null`), nil
}

type Company struct {
    ID   int          `json:"id"`              
    Abn  MyNullString `json:"abn,string"`
}
Copier après la connexion

En utilisant le type MyNullString personnalisé, le marshalling produira désormais le résultat aplati souhaité :

company := &Company{}
company.ID = 68
company.Abn.String = "SomeABN"
result, err := json.Marshal(company)
Copier après la connexion
{
    "id": "68",
    "abn": "SomeABN"
}
Copier après la connexion
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
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