在Haskell中解析JSON字符串

时间:2011-08-05 18:16:04

标签: json parsing haskell

我正在研究简单的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,因为这似乎是推荐的,但我更愿意使用其他库。

此外,可以更改任何和所有此代码。如果得到

1 个答案:

答案 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>