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对象的字段比您需要的多,那么多余的字段将被忽略;所有其他类都希望将其作为默认值。