Heim >Backend-Entwicklung >Golang >Wie kann die sql.NullString-Ausgabe beim Marshaling von JSON in Go reduziert werden?

Wie kann die sql.NullString-Ausgabe beim Marshaling von JSON in Go reduziert werden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-30 02:18:10340Durchsuche

How to Flatten sql.NullString Output When Marshaling JSON in Go?

Reduzierung der sql.NullString-Ausgabe während des JSON-Marshallings

Beim Marshalling einer Go-Struktur, die ein sql.NullString-Feld enthält, umfasst die Standardausgabe die Felder Gültige und String-Eigenschaften. Um eine abgeflachte Ausgabe zu erhalten, die nur den Wert enthält, müssen Sie zusätzliche Schritte unternehmen.

Bedenken Sie die folgende Struktur:

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

Das Marshallen dieser Struktur mit json.Marshal erzeugt eine Ausgabe, die wie folgt aussieht :

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

sql.NullString für benutzerdefiniertes JSON erweitern Marshalling

Um diese Ausgabe zu reduzieren, müssen Sie sql.NullString erweitern und json.Marshaler implementieren.

type NullString sql.NullString

func (x *NullString) MarshalJSON() ([]byte, error) {
    if !x.Valid {
        x.Valid = true
        x.String = ""
        //return []byte("null"), nil
    }
    return json.Marshal(x.String)
}

Definieren Sie einen benutzerdefinierten Typ für die reduzierte Ausgabe

Als nächstes definieren Sie einen benutzerdefinierten Typ, der den erweiterten NullString einbettet und implementiert json.Marshaler.

type MyNullString struct {
    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 dieses benutzerdefinierten Typs wird die gemarshallte Ausgabe zu:

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

Das obige ist der detaillierte Inhalt vonWie kann die sql.NullString-Ausgabe beim Marshaling von JSON in Go reduziert werden?. 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