Maison > développement back-end > Golang > Comment aplatir la sortie JSON d'une structure Go contenant sql.NullString ?

Comment aplatir la sortie JSON d'une structure Go contenant sql.NullString ?

Mary-Kate Olsen
Libérer: 2024-12-02 19:20:13
original
569 Les gens l'ont consulté

How to Flatten JSON Output from a Go struct containing sql.NullString?

Marshaling sql.NullString pour une sortie aplatie

Problème

Étant donné une structure Go contenant un sql.NullString, le marshaling de la structure à l'aide de encoding/json produit un objet imbriqué au lieu de l'objet aplati souhaité valeur.

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

Par exemple, le marshaling d'une telle structure donne un résultat comme :

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

Cependant, le résultat souhaité est aplati :

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

Solution

La personnalisation de la méthode MarshalJSON pour le type NullString en définissant un nouveau type permet une gestion plus contrôlée sortie.

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 implémentant l'interface json.Marshaler, le type MyNullString peut contrôler la façon dont il est représenté en JSON. Lorsqu'il n'est pas nul, il renvoie la chaîne sous-jacente et pour les valeurs nulles, il renvoie une chaîne littérale « nulle ».

L'exemple fourni dans le terrain de jeu du code démontre le comportement souhaité :

https://play.golang.org/p/Ak_D6QgIzLb
Copier après la connexion

Cette solution aplatit la sortie en ignorant le champ Valide et en renvoyant directement la valeur de chaîne.

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