給定一個帶有 sql.NullString 欄位的 Golang 結構體,預設編組行為會導致輸出,其中欄位嵌套在帶有 String 和 Valid 鍵的 JSON 物件內。若要實作僅包含NullString 值的扁平化輸出,請依照下列步驟操作:
1.定義自訂類型:
建立一個嵌入sql.NullString 並實作json.Marshaler 介面的自訂類型。
type MyNullString struct { sql.NullString }
2.實作 MarshalJSON 方法:
在 MyNullString 內,實作 MarshalJSON 方法以提供自訂 JSON 編組行為。
func (s MyNullString) MarshalJSON() ([]byte, error) { if s.Valid { return json.Marshal(s.String) } return []byte(`null`), nil }
3.修改結構體:
結構體中需要展平的欄位使用自訂的 MyNullString 類型。
type Company struct { ID int `json:"id"` Abn MyNullString `json:"abn,string"` }
範例:
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)) }
透過以下步驟,您可以有效地展平sql.NullString 欄位的輸出並只取得編組JSON 中的值。
以上是如何在 Go 中展平編組 sql.NullString 的輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!