Error Domain=NSCocoaErrorDomain Code=3840 Недопустимое значение вокруг символа 1. UserInfo={NSDebugDescription=Недопустимое значение вокруг символа 1. swift 4

Я получил ответ от API через почтальона

{
"status": "1",
"error": false,
"message": "Your order has been placed successfully"
}

Я вызвал api и передал параметры, необходимые для вызова api. Код выдает ошибку «Недопустимое значение вокруг символа 1».

    let urlsContainer = UrlsContainer()
    let url = URL(string: urlsContainer.allotRunnerAPI)
    let session = URLSession.shared
    var request = URLRequest(url: url!)
    let postString = "user_id=\(user_id)&pincode=\(pincode)&select_address=\(select_address)&store_id=\(store_id)"
    request.httpMethod = "POST"
    request.httpBody = postString.data(using: .utf8)
    request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
    guard error == nil else {
    return
    }
    guard let data = data else {
    return
    }

Код должен выполнять блок кода do

do {
    let parsedData = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String: AnyObject]
    print(parsedData)
    }

но теперь из-за какой-то проблемы в коде он выполняет блок кода catch

 catch let error {
    print(error)
    }
   })
  task.resume()

Я не могу найти проблему в своем коде, чтобы устранить ошибку


person Sanjay Mishra    schedule 20.02.2019    source источник
comment
print(String(data:data, encoding:.utf8)!). Я предполагаю, что ответ не JSON.   -  person vadian    schedule 20.02.2019
comment
@vadian, да, печать html-тегов есть какое-нибудь решение?   -  person Sanjay Mishra    schedule 20.02.2019
comment
Ваш синтаксис (пары ключ-значение, разделенные символами амперсанда) предназначен для запросов GET. Для запросов POST вы должны отправить словарь.   -  person vadian    schedule 20.02.2019
comment
@vadian хорошо, спасибо, что поделились этим, на самом деле я не знал этого раньше, но все же у него та же проблема   -  person Sanjay Mishra    schedule 20.02.2019
comment
@SanjayMishra - это поможет вам stackoverflow.com/q/26364914/1042817   -  person Rocky    schedule 20.02.2019
comment
Пожалуйста, внимательно проверьте ответ html-тегов, вы можете найти причину ошибки, также проверьте, нужен ли API-интерфейсу вашего сервиса токен, и вы можете забыть его отправить, я столкнулся с той же проблемой, и причина заключалась в том, что вы забыли отправить токен.   -  person Hosny    schedule 20.02.2019
comment
@Hosny Спасибо за ответ, хорошо   -  person Sanjay Mishra    schedule 20.02.2019


Ответы (1)


используйте [String:String] для отправки данных в API

let params = ["user_id":user_id,
"pincode":pincode,"select_address":select_address,
"store_id":store_id]
let data = JSONSerialization.data(withJSONObject: params, options: .prettyPrinted)

опубликуйте эти данные как свое тело

person Shahzaib Qureshi    schedule 20.02.2019
comment
Никогда не используйте prettyPrint JSON, который отправляется на сервер. Сервер вообще не заботится о читаемости. Опустить параметр options - person vadian; 20.02.2019