FromJSON/ToJSON,其中一些字段应手动解析

FromJSON/ToJSON,其中一些字段应手动解析,json,haskell,aeson,Json,Haskell,Aeson,我有一个数据: data MyData = MyData { a :: String, b :: Integer, c :: Bool } deriving (Generic) instance FromJSON MyData instance ToJSON MyData 事实上,我在MyData中还有更多字段 我想手动解析1或2个字段,因为在MyData中,它们的调用与真正的JSON对象稍有不同,同时仍然可以使用FromJSON和ToJSON之

我有一个数据:

data MyData = MyData { a :: String, b :: Integer, c :: Bool } 
                      deriving (Generic)

instance FromJSON MyData
instance ToJSON MyData
事实上,我在
MyData
中还有更多字段


我想手动解析1或2个字段,因为在
MyData
中,它们的调用与真正的JSON对象稍有不同,同时仍然可以使用
FromJSON
ToJSON
之类的内容。可能吗?或者在这种情况下,我应该手动解析所有字段,而不是使用
FromJSON
/
ToJSON

您需要查看一下Haskell模板。有一个选项可以帮助您重命名字段。例如,假设我想在下面的声明中将
color
字段重命名为
color

data MyData = MyData { address :: String
                     , streetNumber :: Integer
                     , isApartment :: Bool
                     , color :: String
                     }
然后,我添加以下内容,而不是派生
Generic

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

data MyData = MyData { address :: String
                     , streetNumber :: Integer
                     , isApartment :: Bool
                     , color :: String
                     }

$(deriveJSON defaultOptions{
    constructorTagModifier = \f -> if f == "color" then "colour" else f 
  } ''MyData)

然后我的
ToJSON
FromJSON
实例都有相应的命名字段。

相关:顺便问一下,有没有办法用模板haskell生成一个“导入”或“符合条件的导入”列表,这样它就可以像我手动添加它们一样进行编译?@Orado,我不知道。也许其他人会有这样的想法。好吧。是否可以不解析
FromJSON
实现中的所有字段,而只解析我想要的字段,因为其他字段与我无关?@Orado这会自动发生。如果您的JSON对象的字段比您需要的多,那么多余的字段将被忽略;所有其他类都希望将其作为默认值。