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
Freigeben: 2024-11-30 02:18:10
Original
341 Leute haben es durchsucht

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

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

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

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

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

Durch die Verwendung dieses benutzerdefinierten Typs wird die gemarshallte Ausgabe zu:

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

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!

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