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