首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在GHCi中编码为JSON时发生浮点异常,GHCi退出

在 GHCi 中编码为 JSON 时发生浮点异常,GHCi 退出。

原因:在将 Haskell 数据类型转换为 JSON 格式时,可能会遇到精度损失的问题。在 Haskell 中,某些类型的数据可能无法精确表示为 JSON 格式,从而导致浮点异常。

解决方法:为了避免浮点异常,可以使用 Data.Aeson.TH 提供的 defaultOptions 函数来设置默认的精度,从而提高 JSON 序列化的稳定性。

例如:

代码语言:txt
复制
import Data.Aeson

data Person = Person { name :: String, age :: Int }
  deriving (Eq, Show)

instance ToJSON Person where
  toJSON = defaultOptions

在上面的代码中,defaultOptions 函数被用来设置默认的精度,以避免浮点异常。

此外,还可以使用 Data.Aeson.Options 提供的 noFloat64 函数来禁用浮点数精度检查,从而避免浮点异常。

例如:

代码语言:txt
复制
import Data.Aeson
import Data.Aeson.Options

data Person = Person { name :: String, age :: Int }
  deriving (Eq, Show)

instance ToJSON Person where
  toJSON = toJSON @Int

在上面的代码中,toJSON 函数被用来将 Person 类型的对象序列化为 JSON 格式,通过将 Int 类型作为默认精度来避免浮点异常。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

除了FastJson,你还有选择: Gson简易指南

这个周末被几个技术博主的同一篇公众号文章 fastjson又被发现漏洞,这次危害可导致服务瘫痪! 刷屏,离之前的漏洞事件没多久,FastJson 又出现严重 Bug。目前项目中不少使用了 FastJson 做对象与JSON数据的转换,又需要更新版本重新部署,可以说是费时费力。与此同时,也带给我新的思考,面对大量功能强大的开源库,我们不能盲目地引入到项目之中,众多开源框架中任一个不稳定因素就足以让一个项目遭受灭顶之灾。趁着周末,在家学习下同样具备对象JSON相互转换功能的优秀开源框架 Gson,并且打算将今后项目使用 FastJson 的地方逐渐换成使用 Gson,记录下学习总结的内容,希望对小伙伴也有所帮助。

03

除了FastJson,你还有选择: Gson简易指南

前几天被几个技术博主的同一篇公众号文章 fastjson又被发现漏洞,这次危害可导致服务瘫痪! 刷屏,离之前漏洞事件没多久,fastjson 又出现严重 Bug。目前项目中不少使用了 fastjson 做对象与JSON数据的转换,又需要更新版本重新部署,可以说是费时费力。与此同时,也带给我新的思考,面对大量功能强大的开源库,我们不能盲目地引入到项目之中,众多开源框架中某个不稳定因素就足以让一个项目遭受灭顶之灾。趁着周末,在家学习下同样具备JSON与对象转换功能的优秀开源框架 Gson,并且打算将今后项目使用 fastjson 的地方逐渐换成使用 Gson,记录下学习总结的内容,希望对小伙伴也有所帮助。

04
领券