我有一个Haskell记录
data User = User
{ email :: Text
, token :: Text
}
Run Code Online (Sandbox Code Playgroud)
我想在任何输入JSON中忽略"token"的值.例如,如果输入JSON是
{
"email": "foo@bar.com",
"token": "abc123"
}
Run Code Online (Sandbox Code Playgroud)
我希望生成的User对象包含User { email = "foo@bar.com", token = "" }.
我定义了以下内容:
instance FromJSON User where
parseJSON (Object v) =
User <$> v .: "email"
<*> v .:? "" .!= "" -- token
parseJSON _ = fail "Invalid User"
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来设置token字段的值v .:? "" .!= "",忽略"token": "abc123"JSON中的?
我试过了
instance FromJSON User where
parseJSON (Object v) =
User <$> v .: "email"
<*> "" -- token
parseJSON _ = fail "Invalid User"
Run Code Online (Sandbox Code Playgroud)
但它不会编译,因为<*> ""需要是一个Parser Text.
你试过这个吗?
User <$> v .: "email" <*> pure ""
Run Code Online (Sandbox Code Playgroud)
该pure功能来自Control.Applicative模块.在这种情况下,它构造一个简单的解析器,""作为其结果.如果您不熟悉applicative functors,可以在类别数据库中阅读它们.