用于解码JSON的属性名称

时间:2016-06-13 20:27:18

标签: json haskell

data Message = Message {
  type :: String
} deriving (Eq, Show, Data, Typeable)


-- main funciton
let m = decodeJSON "{\"type\":\"event\"}" :: Message
putStrLn (type m)

Haskell新手在这里,我试图解码我从websocket连接收到的消息。但是,Haskell不允许我使用'type'字作为Message类型的属性。如果属性包含类型等单词,那么解码此JSON消息的方法是什么。

1 个答案:

答案 0 :(得分:2)

不允许使用type作为记录类型,您必须进行一些更改。

如果您愿意使用Aeson而不是json包,可以通过手动编写实例来完成此操作,如下所示....

data Message = Message {
  type' :: String
  } deriving (Eq, Show)

instance FromJSON Message where
   parseJSON (Object v) = Message <$> v .: "type"

main = do
  let m = decode "{\"type\":\"event\"}" :: Maybe Message
  putStrLn (show $ fmap type' m)

你必须稍微改变程序的流程......