How do I access a nested JSON value using Alamofir

2020-03-30 05:18发布

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

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条回答
聊天终结者
2楼-- · 2020-03-30 05:49

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)
                    }
                }
        }
    }
查看更多
Juvenile、少年°
3楼-- · 2020-03-30 06:05

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
            }
       }
}
查看更多
登录 后发表回答