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

时间:2016-02-09 09:06:17

标签: json swift alamofire swifty-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 个答案:

答案 0 :(得分:2)

在你的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)
                    }
                }
        }
    }

答案 1 :(得分:0)

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