Я хочу отправить массив словарей в файл php с помощью NSURLConnection.sendAsynchronousRequest. Я подумал, что лучший способ сделать это — отправить объект json в файл php, чтобы избежать отправки каждого объекта самостоятельно. тем не менее, объект json успешно отправляется и принимается php-файлом, но когда я декодирую объект, я получаю нулевое значение. Кто-нибудь знает, что не так с моим кодом?
мой быстрый код:
var jsonArray = [Dictionary<String,AnyObject>]()for user in users {
let dictionary = ["user_id": user.userid, "username":user.username] as [String : Any] // random example
jsonArray.append(dictionary as Dictionary<String, AnyObject>)
}
let url: URL = URL(string: str)!
let rqst:NSMutableURLRequest = NSMutableURLRequest(url:url)
rqst.timeoutInterval = 10
let bodyData = "json=\(jsonArray)"
rqst.httpMethod = "POST"
rqst.httpBody = bodyData.data(using: String.Encoding.utf8)
rqst.httpBody = bodyData.data(using: String.Encoding.utf8)
сторона php:
if(isset($_POST["json"])){
echo "hello world";
$json = $_POST["json"];
echo $json;
$jsonArray = json_decode($json);
echo gettype($jsonArray);
}
else
echo "missing fields";
происходит то, что когда я повторяю тип jsonArray, я получаю нулевое значение, хотя когда я повторяю $ json, я получаю правильное значение.
Кроме того, добавляя rqst.setValue("application/json", forHTTPHeaderField: "Content-Type")
мой быстрый код делает $ _POST [«json»] не установленным.
Кто-нибудь знает, как это исправить?
Вы на самом деле отправляете description
значение Dictionary
структура, которая немного отличается от JSON
,
Словарь имеет =
вместо :
например. Вам следует переписать ваш словарь в допустимую строку JSON.
Во-первых, конвертировать ваши Dictionary
экземпляр в NSData
пример с помощью NSJSONSerialization
объект
let data = NSJSONSerialization.dataWithJSONObject(dictionary, options: .AllowFragments)
А затем преобразовать NSData
в String
let json = String(data: data, encoding: NSUTF8StringEncoding)
Теперь вы можете отправить это json
значение в вашем запросе.
Других решений пока нет …