3 回答
TA贡献1880条经验 获得超4个赞
可能会迟到,但是当搜索相同的问题时,谷歌在高排名中报告此页面,所以:我的解决方案是定义特殊类型,例如附加 NullInt64 并具有并导出 JSON
NullInt64 示例:
// NullInt64 is the same as sql.NullInt64
// But when exported to JSON it is null or the int64 val that is exported
// not a JSON containing Value and Valid properties
type NullInt64 struct {
sql.NullInt64
}
// NullInt64 MarshalJSON interface redefinition
func (r NullInt64) MarshalJSON() ([]byte, error) {
if r.Valid {
return json.Marshal(r.Int64)
} else {
return json.Marshal(nil)
}
}
然后将所有 sql.NullInt64 替换为 NullInt64。您可以轻松地对 sql.NullString 执行相同的操作。希望能帮助到你
TA贡献1757条经验 获得超8个赞
如果你真的想要空字段,你将不得不求助于自定义编组器(或者,也许,只是可能,*string在结构中使用字段并分配nil而不是空字符串)。
但是,如果您查看 JSON(JavaScript Object Notation)的原始目标,您会注意到在 JavaScript 中几乎没有任何区别:
var obj = JSON.parse('{"first_name": null }');
alert(obj.first_name)
和:
var obj = JSON.parse('{}');
alert(obj.first_name)
换句话说:分配null给一个字段与不指定它具有相同的效果。大多数 JSON 解析器都是这样工作的。
Go JSON 编组器支持不指定空字段:
type MyType struct {
firstname string `json:omitempty`
}
最后,这取决于你想用你的 JSON 做什么:)
- 3 回答
- 0 关注
- 256 浏览
添加回答
举报