我正在研究简单的Haskell程序,该程序从服务器获取JSON字符串,解析它,并对数据执行某些操作。目前的细节并不是真正相关,我遇到的麻烦是解析返回的JSON。
我从服务器返回JSON字符串作为IO String
类型,似乎无法弄清楚如何将其解析为JSON对象。
非常感谢任何帮助:)
到目前为止,这是我的代码。
import Data.Aeson
import Network.HTTP
main = do
src <- openURL "http://www.reddit.com/user/chrissalij/about.json"
-- Json parsing code goes here
openURL url = getResponseBody =<< simpleHTTP (getRequest url)
注意:我在示例中使用Data.Aeson
,因为这似乎是推荐的,但我更愿意使用其他库。
此外,可以更改任何和所有此代码。如果得到
答案 0 :(得分:10)
Data.Aeson
旨在与Attoparsec一起使用,因此它只会为您提供一个Parser
,然后您必须使用Attoparsec。此外,Attoparsec更喜欢使用ByteString
,因此您必须稍微改变请求的方式,以获得ByteString
结果而不是String
。
这似乎有效:
import Data.Aeson
import Data.Attoparsec
import Data.ByteString
import Data.Maybe
import Network.HTTP
import Network.URI
main = do
src <- openURL "http://www.reddit.com/user/chrissalij/about.json"
print $ parse json src
openURL :: String -> IO ByteString
openURL url = getResponseBody =<< simpleHTTP (mkRequest GET (fromJust $ parseURI url))
这里我刚刚将JSON解析为普通Value
,但您可能希望创建自己的数据类型并为其编写FromJSON
实例以便整齐地处理转换。 / p>