Обход JSON в Haskell с помощью wreq - ключевые проблемы
Я пытаюсь пройти через некоторый JSON-ответ, который я получаю от OpenWeatherMap API, но у меня возникают проблемы с получением некоторых значений. Вот мой код:
{-# LANGUAGE OverloadedStrings #-}
import Control.Lens
import Data.Aeson.Lens (_String, key)
import Network.Wreq
myAPIKey :: String
myAPIKey = "my_api_key_here"
conditionsQuery :: String -> String -> String -> String
conditionsQuery city country key =
"https://api.openweathermap.org/data/2.5/forecast?q=" ++ city ++ "," ++ country ++ "&appid=" ++ key
main = do
print "What's the city?"
city <- getLine
print "And the country?"
country <- getLine
r <- get (conditionsQuery city country myAPIKey)
print $ r ^. responseBody . key "name" . _String
print $ r ^. responseBody . key "cod" . _String
print $ r ^. responseBody . key "id" . _String
Проблема в том, что возвращается только значение "cod" (в этом случае "200"). Значения для "name" и "id" отображаются как ""
, если мы попробуем с Лондоном, Великобритании, Чикаго, США (например). И все же тело ответа выглядит так:
{
...
"id": 2643743,
"name": "London",
"cod": 200
}
Сначала я подумал, что это несоответствие типов, но 200 Int
там (разве я ошибаюсь?), поэтому я не уверен, где проблема лежит? ""
кажется, что эти 2 ключа (id
а также name
) не существует, но они есть.
Есть идеи? Заранее спасибо.
1 ответ
Тело ответа не выглядит так.
Согласно https://openweathermap.org/forecast5, ключ "cod"
появляется на самом внешнем уровне объекта JSON, но "id"
а также "name"
не делайте.
{
"city":{
"id":1851632,
"name":"Shuzenji",
...
}
"cod":"200",
...
}