使用 Alamofire 解析 JSON 问题

Posted

技术标签:

【中文标题】使用 Alamofire 解析 JSON 问题【英文标题】:Parsing JSON with Alamofire Problems 【发布时间】:2016-10-28 13:23:00 【问题描述】:

我是 swift 和编程新手,我正在尝试在 Alamofire 和 SwiftyJSON 的帮助下解析 JSON,如果 JSON 文件很简单,我没有问题并且工作良好,但是当我有类似 Dictionary 的东西时-> 字典 -> 数组 -> 字典,问题开始了,所以我有以下代码:

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 - 真的是我的钥匙,问题不在于我没有输入钥匙。

它总是在这里进入 else:

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

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

我做错了什么?

【问题讨论】:

你从哪里得到那种类型的JSON 我在教程中看到了,从请求中我得到了一个 JSON 文件,在其他示例中(它在哪里工作)... 但这一定是一个库(也许你正在使用SwiftyJSON),因为JSON 不是Alamofire 中的类型,ios API's 也不是 我用的是SwiftyJSON,忘记写了,我会编辑帖子 【参考方案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
    

【讨论】:

哇,非常感谢!像魅力一样工作)))

以上是关于使用 Alamofire 解析 JSON 问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 SwiftyJSON 和 Alamofire 循环遍历 JSON

无法使用闭包使用 alamofire 解析 json

使用 Alamofire/Codable 解析 JSON 行

JSON数据未在swift3中使用Alamofire进行解析

使用 Alamofire 解析 json 的问题

我需要使用 Alamofire 解析 Json 的帮助