我正在尝试编写一个模块,从API解析XML,剥离一些信息,并将结果打印为JSON,但是在打印步骤中遇到了问题。如果我打印出shows,我确实看到数据是正确的,然而用来将记录转换为json的调用encode shows
会导致段错误。
{-# LANGUAGE Arrows, NoMonomorphismRestriction, OverloadedStrings #-}
import Network.HTTP
import Text.XML.HXT.Core
import Data.Aeson
import qualified Data.ByteString.Lazy.Char8 as LazyByteString
openUrl :: String -> IO String
openUrl url = getResponseBody =<< simpleHTTP (getRequest url)
composeSearch :: String -> String
composeSearch query = "http://services.tvrage.com/feeds/search.php?show=" ++ urlEncode query
searchShow :: String -> IO String
searchShow query = openUrl $ composeSearch query
data TvShow = TvShow { showName, showId :: String } deriving (Show)
getShow = deep (isElem >>> hasName "show") >>>
proc x -> do
name <- getText <<< getChildren <<< deep (hasName "name") -< x
id <- getText <<< getChildren <<< deep (hasName "showid") -< x
returnA -< TvShow { showName = name, showId = id }
instance ToJSON TvShow where
toJSON (TvShow name id) = object ["name" .= name, "id" .= id]
main :: IO ()
main = do
results <- searchShow "Always Sunny"
shows <- runX (readString [ withValidate no ] results >>> getShow)
putStrLn (LazyByteString.unpack (encode shows))
编辑:正如user1891025所指出的,这可能是我的机器或软件包版本的问题。
- 系统:Ubuntu 11.04 32位
- Aeson v0.6.1.0
- GHC v7.2.1
这个问题越来越具体了,所以我会去IRC寻求帮助,但如果有人能提供任何帮助,请告诉我!
encode
的示例,但它也出现了段错误。Aeson(大概)似乎不喜欢我的机器。 :) - Javon Harperghc --make TvGenius.hs
进行编译,然后只需使用./TvGenius
运行可执行文件。 - Javon Harper