Maison > développement back-end > Golang > Comment aplatir la sortie d'un sql.NullString marshallisé en Go ?

Comment aplatir la sortie d'un sql.NullString marshallisé en Go ?

Barbara Streisand
Libérer: 2024-11-28 07:58:14
original
379 Les gens l'ont consulté

How to Flatten the Output of a Marshalled sql.NullString in Go?

Comment aplatir et afficher uniquement la valeur de sql.NullString marshalé dans Go ?

Étant donné une structure Golang avec un champ sql.NullString, le comportement de marshaling par défaut entraîne une sortie où le champ est imbriqué dans un objet JSON avec des clés String et Valid. Pour obtenir une sortie aplatie contenant uniquement la valeur de NullString, suivez ces étapes :

1. Définir un type personnalisé :

Créez un type personnalisé qui intègre sql.NullString et implémente l'interface json.Marshaler.

type MyNullString struct {
    sql.NullString
}
Copier après la connexion

2. Implémentez la méthode MarshalJSON :

Dans MyNullString, implémentez la méthode MarshalJSON pour fournir un comportement de marshalling JSON personnalisé.

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

3. Modifier la structure :

Utilisez le type MyNullString personnalisé pour le champ de la structure qui nécessite un aplatissement.

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

Exemple :

package main

import (
    "database/sql"
    "encoding/json"
    "log"
)

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

func main() {
    company := Company{
        ID:   68,
        Abn:  MyNullString{String: "SomeABN", Valid: true},
    }

    result, err := json.Marshal(company)
    if err != nil {
        log.Fatal(err)
    }

    // Output: {"id":68,"abn":"SomeABN"}
    log.Println(string(result))
}
Copier après la connexion

En suivant ces étapes, vous pouvez aplatir efficacement la sortie des champs sql.NullString et obtenir uniquement la valeur dans votre JSON marshallé.

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 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