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