有没有人知道我在哪里可以找到关于Aeson的ToJSON如何将ADT翻译成Json的文档?我正在使用Haskell作为后端应用程序,我正在尝试在前端编写另一种函数语言的JSON解码器,所以我想使用相同的JSON格式,以便我可以在它们之间发送消息。 / p>
答案 0 :(得分:4)
我不认为它有很好的文档记录,但我在类似的情况下通过使用QuickCheck Arbitrary
实例生成大量源类型,将它们编码为JSON,然后在类似的情况下获得了很多成功将它们用作前端的黄金标准测试。
您还可以通过Data.Aeson.TH
SumEncoding
类型中的the configurable Options
类型来查看Aeson的模板Haskell编码的工作方式。请特别注意Either
,我会解释一下ObjectWithSingleField
使用{"Left": 3}
进行编码,即Left 3
{{1}}。
答案 1 :(得分:0)
当然,查看QuickCheck生成的案例是一种实用的解决方案。
但是在考虑它时,可以方便地获得可能的翻译选项的概念图。
通过示例,我已经浏览了aeson
和an answer here generic-aeson
中和和类型转换的所有可用选项。
但该例子的细节是数据是记录。如果不是,那么示例中的某些内容可能会发生变化。
所以我的概念图(也许,不完整而且非常正确)是这样的:
如果类型不是非平凡的总和,
有一些特殊的基本案例:Maybe a
,[a]
,各种String
类似的类型,Bool
,Int
- 类似,...
如果类型是一个非平凡的总和,那么重要的是它是否是一个" enum" (有所有无效的建设者)或没有。
SumEncoding
选项的非枚举:
请纠正我或填写缺失点。