Hvis du kender strukturen på din BSON, kan du oprette en brugerdefineret type, der implementerer json.Marshaler
og json.Unmarshaler
grænseflader og håndterer NaN som du ønsker. Eksempel:
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"`
/* ... */
}
Hvis du har en vilkårlig struktur af din BSON, er din eneste mulighed at krydse strukturen ved hjælp af refleksion og konvertere enhver forekomst af NaN til en type (muligvis en brugerdefineret type som beskrevet ovenfor)