如何处理 JSON 中的大写案例?

how to handle capital case in JSON?

这是一个愚蠢的问题,我试图通过不同的教程来理解。当 JSON 与大写 Haskell 崩溃时,正如其他人所解释的那样 (https://mail.haskell.org/pipermail/beginners/2013-October/012865.html)。正如建议的那样,它可以通过派生自 deriveFromJSON 来解决。 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  

deriveJSON 和朋友是模板 Haskell 函数,它们将为您生成实例。因此,您不应尝试将它们列在 deriving 子句中。相反,在顶层的拼接中调用它们,如下所示:

{-# LANGUAGE TemplateHaskell #-}
import Data.Aeson.TH

data Person = Person { 
    foo :: String,
    bar :: String
} deriving (Eq, Show)

$(deriveJSON defaultOptions ''Person)

如邮件列表中所述,您可以通过覆盖 defaultOptions 记录的 fieldLabelModifier 函数来自定义字段名称,例如,这将更改 JSON 的名称 fooFoo:

$(deriveFromJSON defaultOptions {
    fieldLabelModifier = let f "foo" = "Foo"
                             f other = other
                         in f
} ''Person)

您对正在生成的实例有任何控制权吗?如果是这样,请不要发出以大写字母开头的键。

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