这是一个愚蠢的问题,我试图从不同的教程中理解。当有一个带有大写情况的JSON时,Haskell会像其他人所解释的那样崩溃(https://mail.haskell.org/pipermail/beginners/2013-October/012865.html)。如建议的那样,它可以通过派生衍生来自解决方案来解决。 DeriveJSON需要一个函数输入,我应该如何在下面的代码中编写derive语句?我在理解中遗漏了一些东西,并感谢任何帮助。
import Data.Aeson.TH
data Person = Person {
Foo :: String
, bar :: String
} deriving (Eq, Show, deriveJSON)
main = do
let b = Person "t" "x"
print b
答案 0 :(得分:10)
deriveJSON
和朋友是模板Haskell函数,它们将为您生成实例。因此,您不应尝试在deriving
子句中列出它们。相反,请在顶层拼接中调用它们,如下所示:
{-# LANGUAGE TemplateHaskell #-}
import Data.Aeson.TH
data Person = Person {
foo :: String,
bar :: String
} deriving (Eq, Show)
$(deriveJSON defaultOptions ''Person)
如邮件列表中所述,您可以通过覆盖fieldLabelModifier
记录的defaultOptions
函数来自定义字段名称,例如,这会将foo
的JSON名称更改为{ {1}}:
Foo
答案 1 :(得分:0)
您是否可以控制正在生成的实例?如果是这样,请不要以大写字母开头发出密钥。
如果不是:只需自己定义实例而不是派生它。这只是几行代码。