由于某种原因,mgo
将空结构插入db as null值,即使我已设置omitempty选项。
package main
import (
"fmt"
"encoding/json"
)
type A struct {
A bool
}
type B struct {
X int `json:"x,omitempty" bson:"x,omitempty"`
SomeA *A `json:"a,omitempty" bson:"a,omitempty"`
}
func main() {
b := B{}
b.X = 123
if buf, err := json.MarshalIndent(&b, "", " "); err != nil {
fmt.Println(err)
} else {
fmt.Println(string(buf))
}
}
json编码器省略了SomeA
属性,但在数据库中它只有"a" : null
。
我做错了什么,或者根本不可能这样做?
答案 0 :(得分:8)
是的,所以问题是在json和bson编码器选项之间有选项卡,这就是为什么omitempty不起作用的原因。所以这是错误:
SomeA *A `json:"a,omitempty" bson:"a,omitempty"`
相反,只需要一个空格,而且全部好:
SomeA *A `json:"a,omitempty" bson:"a,omitempty"`