я хочу отправить url.request (POST) с такой кодируемой структурой:
struct Picklist : Codable {
var id = Int()
var ean = String()
var position = String()
}
и моя просьба такова:
let request = NSMutableURLRequest(url: NSURL(string: "http://XXX.XX.XX.XX/NEW/index.php")! as URL)
request.httpMethod = "POST"let myID = Picklist.init(id: 3, ean: "asdf", position: "q")
let encoder = JSONEncoder()
do {
let jsonData = try encoder.encode(myID)
request.httpBody = jsonData
print("jsonData: ", String(data: request.httpBody!, encoding: .utf8) ?? "no body data")
} catch {
print("ERROR")
}
let task = URLSession.shared.dataTask(with: request as URLRequest) {
data, response, error in
if error != nil {
print("error=\(error)")
return
}
print("response = \(response)")
let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print("responseString = \(responseString)")
}
task.resume()
и на стороне сервера у меня есть этот скрипт PHP:
<?php
print_r($_POST);
?>
но я получаю:
responseString = Optional(Array
(
[{"id":3,"ean":"asdf","position":"q"}] =>
)
Моя проблема в том, что я не могу получить ключи со значением на моем PHP ..
что не так с кодом?
Наконец, ответ:
если вы хотите работать со строкой ответа, просто перейдите и расшифруйте «данные»
Например :
guard let data = data else {return}
do{
let realData = try JSONDecoder().decode(response.self, from: data)
completion(realData)
}catch let jsonErr{
print(jsonErr)
}
в realData вы можете работать с данными, но вам нужно создать Codable / decobale Struct для работы с
ответ — моя структура
или же :
let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
if let responseJSON = responseJSON as? [String: Any] {
print(responseJSON)
}
Других решений пока нет …