我正在尝试在使用SQL.NullFloat64和https://github.com/kisielk/sqlstruct包的代码中将SQL结果编组为JSON。
参考:https://github.com/kisielk/sqlstruct/issues/11#issuecomment-143400458
这个问题是我得到了
{
"Float64": 141,
"Valid": true
}
导致JSON不仅仅是值。按照上面github问题的建议,我尝试制作一个自定义MarshalText(),但它永远不会被调用。
代码位于:https://gist.github.com/fils/3f557941d71f1a7165ca
生成的JSON位于:https://gist.github.com/fils/a01cadcbb5dc7c797c3e
CSV转储功能正在获取并输出该值,但不确定如何为JSON获取该效果。
使用sql.NullFloat64或自定义类型NullFloat64可以得到相同的结果。
答案 0 :(得分:1)
您的NullFloat64
不是encoding.TextMarshaler
。见http://play.golang.org/p/AepGgQkOd7:
prog.go:25: cannot use NullFloat64 literal (type NullFloat64) as type encoding.TextMarshaler in assignment:
NullFloat64 does not implement encoding.TextMarshaler (wrong type for MarshalText method)
have MarshalText() []byte
want MarshalText() ([]byte, error)
将您的方法更改为
func (nf NullFloat64) MarshalText() ([]byte, error) {
if nf.Valid {
nfv := nf.Float64
return []byte(strconv.FormatFloat(nfv, 'f', -1, 64)), nil
} else {
return []byte("null"), nil
}
}