Nếu bạn biết cấu trúc nếu BSON của mình, bạn có thể tạo một kiểu tùy chỉnh triển khai json.Marshaler
và json.Unmarshaler
và xử lý NaN như bạn muốn. Ví dụ:
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"`
/* ... */
}
Nếu bạn có cấu trúc tùy ý của BSON, lựa chọn duy nhất của bạn là duyệt qua cấu trúc, sử dụng phản xạ và chuyển đổi bất kỳ lần xuất hiện nào của NaN thành một loại (có thể là một loại tùy chỉnh như được mô tả ở trên)