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

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

Barbara Streisand
發布: 2024-11-30 02:18:10
原創
239 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板