MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como converter bson para json efetivamente com o mongo-go-driver?


Se você conhece a estrutura do seu BSON, pode criar um tipo personalizado que implemente o json.Marshaler e json.Unmarshaler interfaces e manipula NaN como você deseja. Exemplo:
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 você tiver uma estrutura arbitrária do seu BSON, sua única opção é percorrer a estrutura, usando reflexão, e converter qualquer ocorrência de NaN em um tipo (possivelmente um tipo personalizado, conforme descrito acima)