2016-10-28 146 views
0

我是新来的迅速和编程,我试图解析一个JSON与Alamofire和SwiftyJSON的帮助下,如果JSON文件很简单,我没有问题,工作良好,但是当我有一些像词典 - >词典 - >阵列 - >词典,问题开始,所以我有以下代码:解析JSON与Alamofire问题

func performCYesterdayWeatherFetch(forSelectedCity: String) 
{ 
    let properString = forSelectedCity.addingPercentEncoding(withAllowedCharacters:NSCharacterSet.urlQueryAllowed) 
    Alamofire.request("http://api.apixu.com/v1/history.json?key=MY_KEY&q=\(properString!)&dt=2016-10-20").responseJSON { (response) -> Void in 
     guard response.result.isSuccess else 
     { 
      print("Error while fetching remote rooms: \(response.result.error)") 
      return 
     } 

     guard let json = response.result.value as? JSON, 
     let forecastJson = json["forecast"].dictionary else 
     { 
      print("YESTERDAY PROBLEM") 
      return 
     } 
     for item in (forecastJson["forecastday"]?.arrayValue)! 
     { 
      let day = item["day"].dictionaryObject 
      guard let yesterdayTempCels = day?["avgtemp_c"] as! Double?, 
      let yesterdayTempFahr = day?["avgtemp_f"] as! Double? else 
      { 
      return 

      } 

MY_KEY - 真的是我的钥匙,这个问题是不是在我没有输入钥匙。

它总是在人在这里:

guard let json = response.result.value as? JSON, 
     let forecastJson = json["forecast"].dictionary else 
     { 
      print("YESTERDAY PROBLEM") 
      return 
     } 

他们造成JSON看起来像这样: 薄我需要的是avgtemp_c和avgtemp_f

JSON PIC

我在做什么错?

+0

你从哪里得到该类型的'JSON'? – EridB

+0

我看到,在一个教程中,并从请求我得到一个JSON文件,在其他示例(其中是1阵列它的工作原理)... –

+0

但是,必须是一个库(也许你正在使用'SwiftyJSON')作为JSON是不是'Alamofire'里面的类型既没有'iOS API's' – EridB

回答

1

在这里你有一个解决方案,你甚至不需要SwiftyJSON来获得这些值。

let properString = forSelectedCity.addingPercentEncoding(withAllowedCharacters:NSCharacterSet.urlQueryAllowed) 
Alamofire.request("http://api.apixu.com/v1/history.json?key=MY_KEY&q=\(properString!)&dt=2016-10-20").responseJSON { (response) -> Void 
    guard let json = response.result.value as? [String: Any], 
     let forecastDictionary = json["forecast"] as? [String: Any], 
     let forecastDayArray = forecastDictionary["forecastday"] as? [[String: Any]] else { 
      print("YESTERDAY PROBLEM") 
      return 
    } 

    for item in forecastDayArray { 
     guard let day = item["day"] as? [String: Any], 
      let yesterdayTempCels = day["avgtemp_c"] as? Double, 
      let yesterdayTempFahr = day["avgtemp_f"] as? Double else { 
       return 
     } 

     // Here you should have the values that you need 
    } 
} 
+1

哇谢谢你这么多!像魅力一样工作))) –