MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come convertire in modo efficace bson in json con mongo-go-driver?

Se conosci la struttura del tuo BSON, puoi creare un tipo personalizzato che implementi il ​​json.Marshaler e json.Unmarshaler interfacce e gestisce NaN come desideri. Esempio:

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"`
    /* ... */
}

Se hai una struttura arbitraria del tuo BSON, la tua unica opzione è attraversare la struttura, usando la riflessione e convertire qualsiasi occorrenza di NaN in un tipo (possibilmente un tipo personalizzato come descritto sopra)