如何在JSON中处理大写情况?

时间:2015-06-07 16:53:32

标签: haskell aeson

这是一个愚蠢的问题,我试图从不同的教程中理解。当有一个带有大写情况的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  

2 个答案:

答案 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)

您是否可以控制正在生成的实例?如果是这样,请不要以大写字母开头发出密钥。

如果不是:只需自己定义实例而不是派生它。这只是几行代码。