Проблема при отправке массива словаря в Swift - PullRequest
0 голосов
/ 26 февраля 2020

Я создаю массив словарей, затем передаю его в paramDictionary и отправляю на сервер, но получаю responseStatus код 422 . Я использую Alamofire 5.

Вот структура param, которую я должен отправить, и она успешно работает на почтальоне, но в приложении она всегда дает сбой

{"check_in": [{"check_in_at":"2020-02-26 03:23:44", "gps_coordinates":"3.1697998046875,101.61672197976593"}, 
{"check_in_at":"2020-02-26 03:23:45","gps_coordinates":"3.1697998046875,101.61672197976593"}]}

Вот мой код

func postCheckInApi(viewController: UIViewController,
                          completion:@escaping (_ result:SuccessErrorData)->(),
                          errorHandler:@escaping (_ result:Error,_ statusCode:Int?)->()//error handler
) {

    let url = KCheckin
    let geoArr = Constant.getSearchLocationHistory() ?? [GeoTaggingEntity]()
    var arr = [[String: String]]()

    for i in geoArr{
        let dict: [String : String] = ["gps_coordinates" : i.gps_coordinates ?? "", "check_in_at" : i.check_in_at]
        arr.append(dict)
    }
    let parameterDictionary = ["check_in": arr] as [String : Any]
    print(parameterDictionary)
    let headers: HTTPHeaders = [
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Authorization": Constant.getBearerToken() ?? ""
    ]

    AF.request(url, method: .post, parameters: parameterDictionary, headers: headers).responseData { response in
        switch response.result{
        case.success(let data):
            do{
                let jsonData = try JSONDecoder().decode(SuccessErrorData.self, from: data)
                print("Success")
                completion(jsonData)
            }
            catch{
                //viewController.navigationController?.popToRootViewController(animated: true)
            }
        case .failure(let error):
            print(error)
        }
    }
}

1 Ответ

2 голосов
/ 26 февраля 2020

Вы не можете добавить Array в качестве объекта параметра к вашему paramDictionary. Вам необходимо преобразовать Array в json string и затем добавить его к вам paramDictionary.

. Для этого используйте расширение ниже Collection, чтобы преобразовать Array в Json String

extension Collection {
    func json() -> String? {
        guard let data = try? JSONSerialization.data(withJSONObject: self, options: []) else {
            return nil
        }
        return String(data: data, encoding: String.Encoding.utf8)
    }
}

Как использовать

let jsonStr = yourArray.json()

добавить этот jsonStr к вашему paramDictionary

...