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

时间:2021-09-27 07:08:26

I am trying to access nested JSON results using swiftyJSON and Alamofire. My print value is nill and I believe I am not doing this correctly. What should my parameters be? I am trying to get the quote value located at http://quotes.rest/qod.json

我正在尝试使用swiftyJSON和Alamofire访问嵌套的JSON结果。我的打印值是nill,我相信我做的不对。我的参数应该是什么?我正在尝试获取位于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"])

            }
    }
}

2 个解决方案

#1


2  

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:

在JSON引号中是一个数组,所以如果你想访问第一个对象的引号,你应该访问第一个对象:

 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


0  

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

如果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
            }
       }
}

#1


2  

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:

在JSON引号中是一个数组,所以如果你想访问第一个对象的引号,你应该访问第一个对象:

 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


0  

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

如果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
            }
       }
}