Heim >Backend-Entwicklung >Golang >Wie glätte ich die JSON-Ausgabe einer Go-Struktur, die sql.NullString enthält?

Wie glätte ich die JSON-Ausgabe einer Go-Struktur, die sql.NullString enthält?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-02 19:20:13572Durchsuche

How to Flatten JSON Output from a Go struct containing sql.NullString?

Marshaling von sql.NullString für abgeflachte Ausgabe

Problem

Gegeben eine Go-Struktur, die einen sql.NullString enthält, führt das Marshallen der Struktur mithilfe von binding/json zu Ergebnissen ein verschachteltes Objekt anstelle des gewünschten abgeflachten Werts.

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

Für Das Marshallen einer solchen Struktur führt beispielsweise zu einer Ausgabe wie:

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

Die gewünschte Ausgabe wird jedoch reduziert:

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

Lösung

Anpassen der MarshalJSON-Methode für Der NullString-Typ ermöglicht durch die Definition eines neuen Typs eine kontrolliertere Ausgabe.

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 Implementierung von json.Marshaler-Schnittstelle kann der Typ MyNullString steuern, wie er als JSON dargestellt wird. Wenn es nicht null ist, wird die zugrunde liegende Zeichenfolge zurückgegeben, und für Nullwerte wird eine literale „Null“-Zeichenfolge zurückgegeben.

Das im Code-Playground bereitgestellte Beispiel zeigt das gewünschte Verhalten:

https://play.golang.org/p/Ak_D6QgIzLb

Diese Lösung vereinfacht die Ausgabe, indem sie das Feld „Gültig“ ignoriert und den Zeichenfolgenwert direkt zurückgibt.

Das obige ist der detaillierte Inhalt vonWie glätte ich die JSON-Ausgabe einer Go-Struktur, die sql.NullString enthält?. 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