Я искал способ получить необработанное значение значения в теле ответа JSON, которое я получаю от API.
Вот мой код:
{-# LANGUAGE OverloadedStrings #-}
import Control.Lens
import Data.Aeson.Lens (_String, key)
import Data.Aeson.Lens (_Number, key)
import Network.Wreq
conditionsQuery2 :: String -> String
conditionsQuery2 company =
"https://api.iextrading.com/1.0/stock/" ++ company ++ "/quote"
main :: IO()
main = do
print "What's the company name?"
company <- getLine
r <- get (conditionsQuery2 company)
putStrLn "The full company's name is: "
print $ r ^. responseBody . key "companyName" . _String
putStrLn "And the stock price is: "
print $ r ^? responseBody . key "latestPrice" . _Number
Проблема, которую я получаю, связана с последней строкой print $ r ^? responseBody . key "latestPrice" . _Number
, потому что я получаю значение: Just 166.9
для данной цены акции (просто пример). Я понимаю, что в Haskell есть тип Maybe
, но в контексте получения числового значения из ответа JSON есть ли способ легко получить доступ к этому значению? Или мне нужно написать что-то вроде того, что описано в здесь с Just a -> putStrLn $ "the value: " ++ show a
?
Заранее спасибо.
Nothing
(например, потому что JSON недействителен и т. Д.)? - person Willem Van Onsem   schedule 31.01.2018Nothing
(или, например, использовать вспомогательную функцию, напримерmaybe
) - person jberryman   schedule 31.01.2018Nothing
, вы можете использовать^?!
вместо^?
. - person 4castle   schedule 31.01.2018