作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 IO 中进行 JSON 解析:
{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Simple
import Data.Aeson
import Data.Maybe (fromJust)
main :: IO ()
main = do
response <- getResponseBody <$> httpJSON "http://localhost:9200" :: IO Object
name <- fromJust <$> response .: "name" :: Parser String
print "hi"
我收到错误:
/home/nut/dev/haskell/elastic/app/Main.hs:39:11: error:
• Couldn't match type ‘Parser’ with ‘IO’
Expected type: IO String
Actual type: Parser String
• In a stmt of a 'do' block:
那么如何从 json 结果中获取该 name
呢?
最佳答案
Aeson 有一堆函数可以从 Parser a
转换为 a
:
parse :: (a -> Parser b) -> a -> Result b
parseEither :: (a -> Parser b) -> a -> Either String b
parseMaybe :: (a -> Parser b) -> a -> Maybe b
所以如果你有例如
(.: "name") :: Object -> Parser String
那么你就有了
parseMaybe (.: "name") :: Object -> Maybe String
这样你就可以做到
{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Simple
import Data.Aeson
import Data.Maybe (fromJust)
import Data.Aeson.Types -- new import for parseMaybe
main :: IO ()
main = do
response <- getResponseBody <$> httpJSON "http://localhost:9200"
let name = fromJust $ parseMaybe (.: "name") response :: String
print "hi"
关于 haskell 埃森 : How to get value out of Parser in IO monad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40752365/
我是一名优秀的程序员,十分优秀!