Creating JSON data using SwiftyJson for MultipartFormData request in Alamofire 4

alamofire, ios, multipartform-data, swift3, swifty-json

Solution

I found out there is/was a bug with json.rawString in SwiftyJSON stated in link below:

https://github.com/SwiftyJSON/SwiftyJSON/issues/645

Making fields "implicitly unwrapped" will fix this issue:

    var data = JSON([
                "name": _name.text,
                "code": _code.text,
                "iconId": _id])

//data.rawString() will return nil

    var data = JSON([
                "name": _name.text!,
                "code": _code.text!,
                "iconId": _id])
//data.rawString() will return correct result

After this I can simply use it as follows:

self.service.upload(multipartFormData: { (MultipartFormData) in
            MultipartFormData.append((data.rawString()?.data(using: String.Encoding.utf8))!, withName: "trackerInfo")
            MultipartFormData.append(fileUrl, withName: "File") 
        }, to: url) { (encodingResult) in
            switch encodingResult {
            case .success:
                print(encodingResult)
            case .failure(let encodingError):
                print(encodingError)
            }
        }

Problem

I need to send a MultipartFormData .Post Request using Alamofire 4. The JSON and File data needs to be sent. I am having a hard time converting SwiftyJson object to type Data object. SwiftyJSON looks like this: ``` var json: JSON = JSON([ "Name" : "Ben", "UserID" : 2, "Username" : "benji"]) ``` Alamofire 4 request looks like this ``` service.upload(multipartFormData: { (MultipartFormData) in MultipartFormData.append(userData, withName: "userInfo") MultipartFormData.append(fileUrl, withName: "File") }, to: url) { (encodingResult) in switch encodingResult { case .success(let upload, _, _): upload.responseJSON { response in debugPrint(response) } case .failure(let encodingError): print(encodingError) } } ``` My Question is how do I convert SwiftyJson Object to Type Data so I can append it to mutlipartformdata? I have tried following but they do not seem to work and I can not find a solution online: ``` json.rawData() json.rawString?.data(using: String.Encoding.utf8) ```

Original source