像
sql.NullInt64这样的类型不会对JSON封送或拆封执行任何特殊处理,因此适用默认规则。由于类型是结构,因此将其编组为对象,并将其字段作为属性。
解决此问题的一种方法是创建自己的实现
json.Marshaller/
json.Unmarshaler接口的类型。通过嵌入
sql.NullInt64类型,我们可以免费获得SQL方法。像这样:
type JsonNullInt64 struct { sql.NullInt64}func (v JsonNullInt64) MarshalJSON() ([]byte, error) { if v.Valid { return json.Marshal(v.Int64) } else { return json.Marshal(nil) }}func (v *JsonNullInt64) UnmarshalJSON(data []byte) error { // Unmarshalling into a pointer will let us detect null var x *int64 if err := json.Unmarshal(data, &x); err != nil { return err } if x != nil { v.Valid = true v.Int64 = *x } else { v.Valid = false } return nil}
如果您使用此类型代替
sql.NullInt64,则应按预期进行编码。
您可以在此处测试此示例:http :
//play.golang.org/p/zFESxLcd-c
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)