Si vous connaissez la structure de votre BSON, vous pouvez créer un type personnalisé qui implémente le json.Marshaler
et json.Unmarshaler
interfaces et gère NaN comme vous le souhaitez. Exemple :
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"`
/* ... */
}
Si vous avez une structure arbitraire de votre BSON, votre seule option est de parcourir la structure, en utilisant la réflexion, et de convertir toutes les occurrences de NaN en un type (éventuellement un type personnalisé comme décrit ci-dessus)