- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通常自己写ToJSON
和 FromJSON
实例,但我决定使用 deriveJSON
对于一个类型,因为它是如此简单:
data Priority = HIGH | MEDIUM | LOW deriving Show
$(deriveToJSON id ''Priority)
main = BS.putStrLn . encode $ HIGH
JSON
推导仅将枚举写为字符串。相反,它是哈希的关键!
{"HIGH":[]}
最佳答案
这是因为aeson
不区分总和类型,如您的 Priority
和更复杂的类型,如 data PriorityAndDetails = HIGH { highReason :: Text, alertType :: Alert } | MEDIUM { personResponsible :: Person } | LOW
.从根本上说,这些类型中的每一个都是“只是一个带有 n 个参数的数据构造函数”。
在 Priority
HIGH
, MED
, 和 LOW
每个都是零参数的数据构造函数。在 PriorityAndDetails
HIGH
, MED
, 和 LOW
每个都只是具有一定数量的命名参数的数据构造函数,分别为 2、1 和 0。
一般来说,我发现您可能需要创建自己的 ToJSON
和 FromJSON
除了早期原型(prototype)之外的任何事情的实例。
关于haskell - Aeson 的 derivedJSON 不能按预期对枚举工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117029/
使用 aeson derivedJSON 很容易忽略 Nothing 值,例如: data Person = Person { ssn :: Maybe Text, phone :
我通常自己写ToJSON和 FromJSON实例,但我决定使用 deriveJSON对于一个类型,因为它是如此简单: data Priority = HIGH | MEDIUM | LOW deriv
我是一名优秀的程序员,十分优秀!