使用pipe-aeson解析JSON流

时间:2015-03-16 01:11:54

标签: haskell haskell-pipes

给出一个简单的JSON类型示例:

data Test = Test
  { name :: Text
  , age  :: Int
  } deriving (Show, Generic)

instance FromJSON Test

如何使用pipe-aeson解码使用decoded镜头通过套接字传输的JSON消息流?作为一个例子,我想在他们解析时将它们打印出来:

main = connect "127.0.0.1" "8000" $ \(socket, _) -> $ runEffect $
  some use of zoom decoded? view decoded? >-> P.print

1 个答案:

答案 0 :(得分:3)

decoded(来自Pipes.Aeson.Unchecked的那个)是一个镜头,而不是将原始字节的生产者转换为已解析的FromJSON值的生产者。

因此,我们必须首先使用pipes-network包中的fromSocket函数从套接字中创建字节的生产者。像这样:

-- to help with type inference
printTest :: (MonadIO m) => Consumer' Test m r
printTest = P.print

main = do
    connect "127.0.0.1" "8000" $ \(socket, _) -> $ runEffect $
        view decoded (fromSocket socket 4096) >-> printTest
    return ()