我正在研究简单的
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,因为这似乎是推荐的,但是我更愿意使用另一个库.
此外,可以更改任何和所有此代码.如果得到了
解决方法
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解析为普通值,但您可能希望创建自己的数据类型并为其编写FromJSON实例以便整齐地处理转换.