无法从天气 API 获取 json。 iOS

Posted

技术标签:

【中文标题】无法从天气 API 获取 json。 iOS【英文标题】:Can't get json from weather-api. iOS 【发布时间】:2017-01-20 10:56:03 【问题描述】:

这是 JSON 文件

 
  "weather":[  
      
     "id":804,
     "main":"Clouds",
     "description":"overcast clouds",
     "icon":"04d"
  
],
 "main":  
  "temp":273.15,
  "pressure":1035,
  "humidity":84,
  "temp_min":273.15,
  "temp_max":273.15
,

"name":"Wroclaw",

 

这是代码。

var cityName: String!
var degree: Int!
var someWeather: String!

let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject]


            if let main = json["main"] as? [String : AnyObject] 
                if let temp = main["temp"] as? Int 
                    self.degree = temp
                
            
            if let city = json["name"] as? String 
                self.cityName = city
            


     if let weather = json["weather"] as? [String : AnyObject] 
     if let someWeather = weather["main"] as? String 
     self.weatherDescription = someWeather 
 
 

labelWeather.text = self.weatherDescription

如何将json中天气的“main”或“description”的值保存到变量weatherDescription?我尝试在这段代码中,但它没有显示任何东西。 度数和城市名称可以正确显示,但天气不起作用。

更新的代码 ////////////////////////////////

  var  let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject]


                if let main = json["main"] as? [String : AnyObject] 
                    if let temp = main["temp"] as? Int 
                        self.degree = temp
                    
                    if let pressuer = main["pressure"] as? Int 
                        self.cisnienie = pressuer
                    
                

                if let weather = json["weather"] as? [[String : Any]] 
                    for data in weather 
                        if let main = data["main"] as? String 
                            print(main)
                        
                    
                

                if let nazwa = json["name"] as? String 
                    self.nazwaMiasta = nazwa
                

这是所有 JSON 文件:

  
   "coord":  
      "lon":-0.13,
      "lat":51.51
   ,
   "weather":[  
        
         "id":800,
         "main":"Clear",
         "description":"clear sky",
         "icon":"01d"
      
  ],
  "base":"stations",
  "main":  
     "temp":279.07,
     "pressure":1032,
     "humidity":52,
     "temp_min":278.15,
     "temp_max":280.15
  ,
    "visibility":10000,
     "wind":  
     "speed":7.2,
     "deg":80
  ,
   "clouds":  
    "all":0
 ,
  "dt":1484923800,
 "sys":  
     "type":1,
     "id":5091,
     "message":0.0087,
     "country":"GB",
     "sunrise":1484898825,
     "sunset":1484929819
  ,
  "id":2643743,
  "name":"London",
  "cod":200

【问题讨论】:

【参考方案1】:

“天气”是array 而不是dictionary ..

if let weather = json["weather"] as? [[String : Any]] 
    for data in weather
       if let main = data["main"] as? String
           print(main)
       
    
 

【讨论】:

我有错误:类型(键:字符串,值:AnyObject)没有下标成员如何将这个“主要”从“天气”保存到不打印的变量。 在哪一行? 打印(数据[“main”]) 我使用的是 swift 3.0.2 我更新了代码,也有同样的错误。在我的问题中,我添加了所有 JSON 文件和我的代码

以上是关于无法从天气 API 获取 json。 iOS的主要内容,如果未能解决你的问题,请参考以下文章

简单天气应用开发——API接口

组态王如何显示实时天气

php怎么解析天气预报api返回的数据

地理位置始终显示莫斯科 Javascript/JQuery/JSON(开放天气 API)

Flutter 使用 BloC 模式从 API 结果中获取列表元素

我正在尝试从元天气 api 获取数据,但它不让我