Om du känner till strukturen för din BSON kan du skapa en anpassad typ som implementerar json.Marshaler
och json.Unmarshaler
gränssnitt och hanterar NaN som du vill. Exempel:
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"`
/* ... */
}
Om du har en godtycklig struktur för din BSON, är ditt enda alternativ att gå igenom strukturen med reflektion och konvertera eventuella förekomster av NaN till en typ (möjligen en anpassad typ enligt beskrivningen ovan)