MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie konvertiert man bson effektiv mit mongo-go-driver in json?

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)