此示例中的点等于(.=
)和点冒号(.:
)语法在Aeson JSON库中的含义是什么?
instance ToJSON Coord where
toJSON (Coord xV yV) = object [ "x" .= xV,
"y" .= yV ]
-- A FromJSON instance allows us to decode a value from JSON. This
-- should match the format used by the ToJSON instance.
instance FromJSON Coord where
parseJSON (Object v) = Coord <$>
v .: "x" <*>
v .: "y"
parseJSON _ = empty
Github上的完整示例:https://github.com/bos/aeson/blob/master/examples/Simplest.hs
答案 0 :(得分:8)
评论都是正确的。您可以使用Hoogle来获取这些函数,并找到正确的haddock文档,其中显示这些运算符是库中定义的函数,而不是Haskell语言的一部分。通常,库使用起始.
来定义中缀函数,因为许多其他所需符号对函数无效(ex :.
)或单数字符是Haskell中的保留语法(ex {{1 },=
)。
:
用于帮助创建JSON对象,而(.=)
用于解析JSON。通常使用Aeson,您可以在某些数据结构和一些JSON消息集之间进行一对一匹配,例如:
.:
现在您可以在GHCi中加载此模块并轻松玩耍:
{-# LANGUAGE OverloadedStrings #-}
import Data.Aeson
import Data.Text
import Control.Applicative ((<$>), (<*>))
import Control.Monad (mzero)
data ServerMsg = ServerMsg.
{ msgId :: Int
, msg :: Text
} deriving (Show)
instance ToJSON ServerMsg where
toJSON d = object [ "msgId" .= msgId d
, "msg" .= msg d
]
instance FromJSON ServerMsg where
parseJSON (Object o) =
ServerMsg <$> o .: "msgId" <*> o .: "msg"
parseJSON _ = mzero
testJSON :: Value
testJSON = toJSON (ServerMsg 398242 "Hello user3526171")
testParse :: Result ServerMsg
testParse = fromJSON testJSON