यदि आप संरचना को जानते हैं यदि आपका बीएसओएन, तो आप एक कस्टम प्रकार बना सकते हैं जो json.Marshaler
को लागू करता है और json.Unmarshaler
इंटरफेस, और आपकी इच्छानुसार NaN को संभालता है। उदाहरण:
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"`
/* ... */
}
यदि आपके पास अपने बीएसओएन की मनमानी संरचना है, तो आपका एकमात्र विकल्प प्रतिबिंब का उपयोग करके संरचना को पार करना है, और NaN की किसी भी घटना को एक प्रकार में परिवर्तित करना है (संभवतः ऊपर वर्णित एक कस्टम प्रकार)