Разбор строки JSON в Haskell - PullRequest
       19

Разбор строки JSON в Haskell

7 голосов
/ 05 августа 2011

Я работаю над простой программой на 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 Ответ

10 голосов
/ 05 августа 2011

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 для аккуратной обработки преобразования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...