Wenn Sie die Struktur Ihres BSON kennen, können Sie einen benutzerdefinierten Typ erstellen, der den json.Marshaler
implementiert und json.Unmarshaler
Schnittstellen und handhabt NaN nach Ihren Wünschen. Beispiel:
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"`
/* ... */
}
Wenn Sie eine willkürliche Struktur Ihres BSON haben, besteht Ihre einzige Möglichkeit darin, die Struktur mithilfe von Reflexion zu durchlaufen und alle Vorkommen von NaN in einen Typ umzuwandeln (möglicherweise einen benutzerdefinierten Typ, wie oben beschrieben)