Als u de structuur van uw BSON kent, kunt u een aangepast type maken dat de json.Marshaler
implementeert en json.Unmarshaler
interfaces en behandelt NaN zoals u dat wilt. Voorbeeld:
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"`
/* ... */
}
Als je een willekeurige structuur van je BSON hebt, is je enige optie om de structuur te doorkruisen, met behulp van reflectie, en eventuele exemplaren van NaN om te zetten in een type (mogelijk een aangepast type zoals hierboven beschreven)