如何使用 Alamofire 和 SwiftyJSON 访问嵌套的 JSON 值?

Posted

技术标签:

【中文标题】如何使用 Alamofire 和 SwiftyJSON 访问嵌套的 JSON 值?【英文标题】:How do I access a nested JSON value using Alamofire and SwiftyJSON? 【发布时间】:2016-02-09 09:06:17 【问题描述】:

我正在尝试使用 swiftyJSON 和 Alamofire 访问嵌套的 JSON 结果。我的打印值为零,我相信我没有正确执行此操作。我的参数应该是什么?我正在尝试获取位于 http://quotes.rest/qod.json

的报价值
func getAPI() 
    Alamofire.request(.GET, "http://quotes.rest/qod.json", parameters: ["contents": "quotes"])
        .responseJSON  response in
            if let JSON = response.result.value 
                print(JSON["quote"])

            
    

【问题讨论】:

【参考方案1】:

在您的 JSON 中,quotes 是一个数组,因此如果您想访问第一个对象的 quote,您应该通过访问第一个对象来实现:

 func getAPI() 
        Alamofire.request(.GET, "http://quotes.rest/qod.json", parameters: ["contents": "quotes"])
            .responseJSON  response in
                if let jsonValue = response.result.value 
                    let json = JSON(jsonValue)
                    if let quote = json["contents"]["quotes"][0]["quote"].string
                     print(quote)
                    
                
        
    

【讨论】:

太棒了!谢谢你的解释,它很好用,我理解!【参考方案2】:

如果 json 的语法不正确,因为它已经完全打印出来,你应该注意到哪里出了问题。

func getAPI() 
Alamofire.request(.GET, "http://quotes.rest/qod.json", parameters: ["contents": "quotes"])
    // JSON response
        .responseJSON  response in switch response.result 
        case .Failure(let error):
            // got an error in getting the data, need to handle it
            print("error calling GET, json response type :")
            // print alamofire error code
            let statusCode = error.code
            print("error code json : \(statusCode)")
            // print json response from server
            if let data = response.data 
                print("Response data: \(NSString(data: data, encoding: NSUTF8StringEncoding)!)")
            
            // print http status code plus error string
            print(NSHTTPURLResponse.localizedStringForStatusCode(statusCode))
            if let httpResponse : NSHTTPURLResponse = response.response 
                print("HTTP Response statusCode: \(httpResponse.statusCode)")
            
        case .Success( _):
            let statusCode = (response.response?.statusCode)!
            print("status code json : \(statusCode)")
            print("there is a response json")
            //print(value)
            // parse the result as JSON, since that's what the API provides and save datas as new user in coreData
            guard let data = response.data else 
                print("Error parsing response data")
                return
            
            let json = JSON(data: data)
            // access first element of the array
            if let postContent = json["contents"]["quotes"][0]["quote"].string
             // deal with json
            
       

【讨论】:

以上是关于如何使用 Alamofire 和 SwiftyJSON 访问嵌套的 JSON 值?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire 和 SwiftyJSON 将数据发送到表视图

如何使用 Alamofire 和 SwiftyJSON 正确解析 JSON

如何在 alamofire 中使用自定义动词?

如何将 RxSwift 与 AlamoFire 和 SwiftyJSON 一起使用?

如何使用 AlamoFire 搜索 JSON API 和解码数组

如何使用 Alamofire 和 Swift Decode 从 JSON 解码和访问 Double