如何处理 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 的名称 foo
到 Foo
:
$(deriveFromJSON defaultOptions {
fieldLabelModifier = let f "foo" = "Foo"
f other = other
in f
} ''Person)
您对正在生成的实例有任何控制权吗?如果是这样,请不要发出以大写字母开头的键。
如果不是:只需自己定义实例而不是派生它。这只是几行代码。
这是一个愚蠢的问题,我试图通过不同的教程来理解。当 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 的名称 foo
到 Foo
:
$(deriveFromJSON defaultOptions {
fieldLabelModifier = let f "foo" = "Foo"
f other = other
in f
} ''Person)
您对正在生成的实例有任何控制权吗?如果是这样,请不要发出以大写字母开头的键。
如果不是:只需自己定义实例而不是派生它。这只是几行代码。