Search code examples
iosjsonswiftalamofireswifty-json

Parsing Alamofire result into objects in Swift (using: Alamofire, SwiftyJSON & ObjectMapper)


I'm having problems parsing the incoming JSON.

This is my function:

func postCheckUserPhonenumbers(phonenumbers:[String], completionHandler: (([AnyObject?], AnyObject?) -> Void)) {
        let urlString = Constant.apiUrl().stringByAppendingFormat(Constant.apiPostCheckUserPhonenumbers)

        let phoneNumbersDictionary = phonenumbers.map({ ["number": $0] })

        let JSON = try? NSJSONSerialization.dataWithJSONObject(phoneNumbersDictionary, options: [])

        let request = NSMutableURLRequest(URL: NSURL(string: urlString)!)
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.HTTPMethod = "POST"
        request.HTTPBody = JSON

        Alamofire.request(request).validate().responseJSON(completionHandler: {response in
            if response.result.isSuccess{
                if let value = response.result.value {
//                    let json = JSON(value)
                    if let users:Array<User> = Mapper<User>().mapArray(value) {
                        completionHandler(users, nil)
                    } else {
                        completionHandler([nil], nil)
                    }
                }
            }
            if response.result.isFailure{
                let message = ApiMessage()
                message.message = "No users found"
                completionHandler([nil],message)
            }
        })
    }

enter image description here

Normally I cast the result into a JSON first but this time I get compile errors when trying to do that:

enter image description here


Solution

  • It was indeed my JSON variable declared above the function. I've now got this:

    func postCheckUserPhonenumbers(phonenumbers:[String], completionHandler: (([AnyObject?], AnyObject?) -> Void)) {
        let urlString = Constant.apiUrl().stringByAppendingFormat(Constant.apiPostCheckUserPhonenumbers)
    
        let phoneNumbersDictionary = phonenumbers.map({ ["number": $0] })
    
        let inputJSON = try? NSJSONSerialization.dataWithJSONObject(phoneNumbersDictionary, options: [])
    
        let request = NSMutableURLRequest(URL: NSURL(string: urlString)!)
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.HTTPMethod = "POST"
        request.HTTPBody = inputJSON
    
        Alamofire.request(request).validate().responseJSON(completionHandler: {response in
            if response.result.isSuccess{
                if let value = response.result.value {
                    let json = JSON(value)
                    let jsonString = json.rawString()
                    if let users:Array<User> = Mapper<User>().mapArray(jsonString) {
                        completionHandler(users, nil)
                    } else {
                        completionHandler([nil], nil)
                    }
                }
            }
            if response.result.isFailure{
                let message = ApiMessage()
                message.message = "No users found"
                completionHandler([nil],message)
            }
        })
    }