给定一个带有 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中文网其他相关文章!