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
Barbara Streisandoriginal
2024-11-28 07:58:14405parcourir

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
}

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
}

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

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

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