Heim >Backend-Entwicklung >Golang >Wie glätte ich die Ausgabe eines Marshalled sql.NullString in Go?

Wie glätte ich die Ausgabe eines Marshalled sql.NullString in Go?

Barbara Streisand
Barbara StreisandOriginal
2024-11-28 07:58:14376Durchsuche

How to Flatten the Output of a Marshalled sql.NullString in Go?

Wie glätte ich den Wert von Marshalled sql.NullString in Go und gebe ihn nur aus?

Bei einer gegebenen Golang-Struktur mit einem sql.NullString-Feld ergibt sich das standardmäßige Marshalling-Verhalten eine Ausgabe, bei der das Feld in einem JSON-Objekt mit String- und Valid-Schlüsseln verschachtelt ist. Um eine abgeflachte Ausgabe zu erhalten, die nur den Wert des NullStrings enthält, führen Sie die folgenden Schritte aus:

1. Definieren Sie einen benutzerdefinierten Typ:

Erstellen Sie einen benutzerdefinierten Typ, der sql.NullString einbettet und die json.Marshaler-Schnittstelle implementiert.

type MyNullString struct {
    sql.NullString
}

2. Implementieren Sie die MarshalJSON-Methode:

Implementieren Sie im MyNullString die MarshalJSON-Methode, um benutzerdefiniertes JSON-Marshalling-Verhalten bereitzustellen.

func (s MyNullString) MarshalJSON() ([]byte, error) {
    if s.Valid {
        return json.Marshal(s.String)
    }
    return []byte(`null`), nil
}

3. Ändern Sie die Struktur:

Verwenden Sie den benutzerdefinierten MyNullString-Typ für das Feld in der Struktur, das reduziert werden muss.

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

Beispiel:

package main

import (
    "database/sql"
    "encoding/json"
    "log"
)

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

func main() {
    company := Company{
        ID:   68,
        Abn:  MyNullString{String: "SomeABN", Valid: true},
    }

    result, err := json.Marshal(company)
    if err != nil {
        log.Fatal(err)
    }

    // Output: {"id":68,"abn":"SomeABN"}
    log.Println(string(result))
}

Indem Sie diese Schritte befolgen, können Sie die Ausgabe von sql.NullString-Feldern effektiv reduzieren und nur die erhalten Wert in Ihrem gemarshallten JSON.

Das obige ist der detaillierte Inhalt vonWie glätte ich die Ausgabe eines Marshalled sql.NullString in Go?. 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