給定一個包含 sql.NullString 的 Go 結構,使用encoding/json編組此結構會產生嵌套物件而不是所需的展平物件
type Company struct { ID int `json:"id"` Abn sql.NullString `json:"abn,string"` }
例如,編組這樣的結構會產生如下輸出:
{ "id": "68", "abn": { "String": "SomeABN", "Valid": true } }
但是,所需的輸出被展平:
{ "id": "68", "abn": "SomeABN" }
定義新類型來自訂NullString 類型的MarshalJSON 方法可以實作更多功能受控輸出。
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"` }
透過實作 json.Marshaler 接口,MyNullString 類型可以控制它如何表示為 JSON。當它為非空時,它會傳回底層字串,對於空值,它會傳回一個文字「空」字串。
程式碼遊樂場中提供的範例示範了所需的行為:
https://play.golang.org/p/Ak_D6QgIzLb
此解決方案透過忽略 Valid 欄位並直接傳回字串值來展平輸出。
以上是如何展平包含 sql.NullString 的 Go 結構的 JSON 輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!