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
Patricia Arquetteoriginal
2024-12-03 00:19:12986parcourir

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

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

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

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

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

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

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)
{
    "id": "68",
    "abn": "SomeABN"
}

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