首頁 >後端開發 >Golang >在 Go 封送 JSON 時如何展平 sql.NullString 輸出?

在 Go 封送 JSON 時如何展平 sql.NullString 輸出?

Barbara Streisand
Barbara Streisand原創
2024-11-30 02:18:10246瀏覽

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

在JSON 封送期間展平sql.NullString 輸出

當封送包含sql.NullString 欄位的Go 結構時,預設輸出包括該欄位的有效屬性和字串屬性。若要實現僅包含值的扁平化輸出,您必須採取額外的步驟。

考慮以下結構:

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

使用json.Marshal 編組此結構會產生如下所示的輸出:

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

為自訂JSON擴充sql.NullString編組

要展平此輸出,您必須擴充 sql.NullString 並實作 json.Marshaler。

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)
}

為展平輸出定義自訂類型

接下來,定義一個嵌入擴充 NullString並實現的自訂類型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"`
}

透過使用此自訂類型,編組輸出將變為:

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

以上是在 Go 封送 JSON 時如何展平 sql.NullString 輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn