How do I access a nested JSON value using Alamofire and SwiftyJSON?

大城市里の小女人 提交于 2019-12-01 10:49:25

In your JSON quotes is an array so if you want to access quote of the first object you should do it by accessing first object:

 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)
                    }
                }
        }
    }

If the syntax of the json isn't correct, since it is fully printed anyway you should notice what's wrong.

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
            }
       }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!