【Golang】Json 无法表示 float64 类型的 NaN 以及 Inf 导致的 panic
解释:
在 Go 语言中,float64
类型的值可以是 NaN(Not a Number)或 Inf(无穷大),当尝试将这些值编码为 JSON 时,会导致 panic,因为 JSON 标准不支持这些特殊值。
解决方法:
- 在尝试编码为 JSON 之前,对这些特殊值进行检查和处理。
- 如果需要在 JSON 中表示这些值,可以将它们转换为字符串,或者定义自己的 JSON 编码逻辑来支持这些特殊值。
示例代码:
func main() {
var specialValue float64 = math.Inf(1) // 正无穷大
// 检查并处理特殊值
if math.IsNaN(specialValue) || math.IsInf(specialValue, 0) {
specialValue = 0 // 或者其他合适的默认值
}
// 使用标准库 json.Marshal 编码时,不会发生 panic
jsonData, err := json.Marshal(specialValue)
if err != nil {
log.Fatalf("JSON marshaling failed: %s", err)
}
fmt.Println(string(jsonData))
}
在这个示例中,如果值是 NaN 或 Inf,我们将其替换为数值 0,然后正常进行 JSON 编码。根据实际需求,你可以选择其他的默认值或者特殊值处理方式。
评论已关闭