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
Mary-Kate Olsenoriginal
2024-12-02 19:20:13571parcourir

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"`
}

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

{
    "id": "68",
    "abn": {
        "String": "SomeABN",
        "Valid": true
    }
}

Cependant, le résultat souhaité est aplati :

{
    "id": "68",
    "abn": "SomeABN"
}

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"`
}

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

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!

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