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
Patricia ArquetteOriginal
2024-12-03 00:19:12996Durchsuche

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

Beim Marshalling dieser Struktur ähnelt das Ergebnis dem folgenden:

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

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

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

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

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

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!

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