MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment convertir efficacement bson en json avec mongo-go-driver ?

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)