Alamofire сообщение с телом - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь отправить POST HTTP-запрос с телом, используя Alamofire, и буду признателен за любую помощь.

Мое тело:

{"data":{"gym":{"country":"USA","city":"San Diego","id":1}}}

Должен ли я сделать что-то подобное?

let parameters: [String: Any] = [ "data": [
  "gym": [
  "country":"USA",
  "city":"San Diego",
  "id":1
]]]

Alamofire.request(URL, method: .post, parameters: parameters, headers: headers())
  .responseJSON { response in
    print(response)
} 

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Попробуйте этот метод для преобразования строки JSON в словарь

func convertToDictionary(text: String) -> [String: Any]? {
    if let data = text.data(using: .utf8) {
        do {
            return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
        } catch {
            print(error.localizedDescription)
        }
    }
    return nil
}

let str = "{\"data\":{\"gym\":{\"country\":\"USA\",\"city\":\"San Diego\",\"id\":1}}}"

let dict = convertToDictionary(text: str)

и отправьте словарь в качестве параметра в вашем запросе.

Alamofire.request(URL, method: .post, parameters: dict, headers: headers())
  .responseJSON { response in
    print(response)
} 

ref: Как преобразовать строку JSON в словарь?

0 голосов
/ 03 июля 2018

Я считаю, что вам следует подготовить словарь в следующем формате:

var gym = [String:Any]()
gym["country"] = "USA"
gym["city"] = "San"

var data = [[String:Any]]()
data.append(gym)
var metaData = [String:Any]()
metaData["data"] = data
0 голосов
/ 03 июля 2018

Если вы хотите отправить параметры в формате json, используйте кодировку как JSONEncoding. Поэтому добавьте параметр для кодирования в запрос следующим образом:

Alamofire.request(URL, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers())
   .responseJSON { response in
    print(response)
} 

Надеюсь, это поможет ...

...