Heim > Backend-Entwicklung > Golang > Wie kann ich die JSON-Ausgabe von sql.NullString in Go reduzieren?

Wie kann ich die JSON-Ausgabe von sql.NullString in Go reduzieren?

Patricia Arquette
Freigeben: 2024-12-03 00:19:12
Original
995 Leute haben es durchsucht

How to Flatten sql.NullString JSON Output in Go?

Benutzerdefiniertes Marshalling für abgeflachte sql.NullString-Ausgabe

Beim Marshalling eines sql.NullString-Felds in einer Go-Struktur mit json.Marshal, der Standardeinstellung Die Ausgabe enthält zusätzliche Metadaten wie die Felder „Valid“ und „String“. Dieses Verhalten ist in bestimmten Szenarios, in denen der abgeflachte Wert bevorzugt wird, möglicherweise nicht erwünscht.

Beachten Sie die folgende Struktur:

type Company struct {
    ID   int             `json:"id"`              
    Abn  sql.NullString  `json:"abn,string"`
}
Nach dem Login kopieren

Beim Marshalling dieser Struktur ähnelt das Ergebnis dem folgenden:

{
    "id": "68",
    "abn": {
        "String": "SomeABN",
        "Valid": true
    }
}
Nach dem Login kopieren

Das gewünschte Ergebnis ist jedoch eine abgeflachte Version mit nur Wert:

{
    "id": "68",
    "abn": "SomeABN"
}
Nach dem Login kopieren
Nach dem Login kopieren

Benutzerdefinierte Marshaller-Implementierung

Um dies zu erreichen, ist es notwendig, einen benutzerdefinierten Typ zu implementieren, der sql.NullString einbettet und die json.Marshaler-Schnittstelle implementiert . Dieser benutzerdefinierte Typ kann sein eigenes Marshalling-Verhalten über die MarshalJSON-Methode definieren.

Hier ein Beispiel:

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"`
}
Nach dem Login kopieren

Durch die Verwendung des benutzerdefinierten MyNullString-Typs erzeugt das Marshalling nun das gewünschte abgeflachte Ergebnis:

company := &Company{}
company.ID = 68
company.Abn.String = "SomeABN"
result, err := json.Marshal(company)
Nach dem Login kopieren
{
    "id": "68",
    "abn": "SomeABN"
}
Nach dem Login kopieren
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich die JSON-Ausgabe von sql.NullString in Go reduzieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage