在 Haskell 中遍历 JSON 与 wreq - 关键问题



我正在尝试遍历从OpenWeatherMap API获得的一些JSON响应,但是在检索某些值时遇到了一些问题。这是我的代码:

{-# 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"(。 "名称"和"id"的值显示为 "" ,如果我们尝试使用伦敦,GB,芝加哥,美国(例如(。然而,响应正文如下所示:

{
   ...
   "id": 2643743,
   "name": "London",
   "cod": 200
}

我最初以为是类型不匹配,但 200 是那里的Int(除非我弄错了?(,所以我不确定问题出在哪里? ""似乎表明这两个键(idname(不存在,但它们确实存在。

有什么想法吗?提前谢谢。

响应正文看起来不是那样的。

根据 https://openweathermap.org/forecast5,键"cod"出现在 JSON 对象的最外层,但"id""name"没有。

{
    "city":{
        "id":1851632,
        "name":"Shuzenji",
        ...
        }
    "cod":"200",
    ...
}

相关内容

  • 没有找到相关文章

最新更新