如果您知道BSON的结构,则可以创建一个实现
json.Marshaler和
json.Unmarshaler接口的自定义类型,并根据需要处理NaN。例:
type maybeNaN struct{ isNan bool number float64}func (n maybeNaN) MarshalJSON() ([]byte, error) { if n.isNan { return []byte("null"), nil // Or whatever you want here } return json.Marshal(n.number)}func (n *maybeNan) UnmarshalJSON(p []byte) error { if string(p) == "NaN" { n.isNan = true return nil } return json.Unmarshal(p, &n.number)}type myStruct struct { someNumber maybeNaN `json:"someNumber" bson:"someNumber"` }如果您的BSON具有任意结构,则唯一的选择是使用反射遍历该结构,并将所有出现的NaN转换为类型(可能是如上所述的自定义类型)



