在Haskell中解析JSON字符串

Chr*_*lij 7 parsing json 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)
Run Code Online (Sandbox Code Playgroud)

注意:Data.Aeson在示例中使用的似乎是推荐的,但是我更愿意使用另一个库.

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

ham*_*mar 10

Data.Aeson设计用于Attoparsec,所以它只给你一个Parser你必须使用Attoparsec.此外,Attoparsec更喜欢继续工作ByteString,因此您必须稍微改变请求的方式以获得ByteString结果而不是a 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))
Run Code Online (Sandbox Code Playgroud)

在这里,我刚刚将JSON解析为普通的Value,但您可能希望创建自己的数据类型并FromJSON为其编写实例以便整齐地处理转换.