我有Haskell记录
data User = User
{ email :: Text
, token :: Text
}
并且我想在任何输入JSON中忽略“令牌”的值。例如,如果输入的JSON是
{
"email": "[email protected]",
"token": "abc123"
}
我想要User
包含的结果对象User { email = "[email protected]", token = "" }
。
我定义了以下内容:
instance FromJSON User where
parseJSON (Object v) =
User <$> v .: "email"
<*> v .:? "" .!= "" -- token
parseJSON _ = fail "Invalid User"
有没有一种更好的方法来设置token
字段的值,然后v .:? "" .!= ""
忽略"token": "abc123"
JSON中的?
我试过了
instance FromJSON User where
parseJSON (Object v) =
User <$> v .: "email"
<*> "" -- token
parseJSON _ = fail "Invalid User"
但是它不能编译,因为<*> ""
需要是一个Parser Text
。
你尝试过这个吗?
User <$> v .: "email" <*> pure ""
该pure
功能来自Control.Applicative
模块。在这种情况下,它将构造一个普通的解析器,将""
其作为结果传递。如果您不熟悉应用函子,则可以在typeclassopedia上阅读有关它们的信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句