2016-10-13 1 views
0

NSURLConnection.sendAsynchronousRequest를 사용하여 PHP 사전에 배열을 보내고 싶습니다. 나는 그렇게하는 가장 좋은 방법은 각 객체를 자체적으로 보내는 것을 피하기 위해 PHP 파일에 json 객체를 보내는 것이라고 생각했습니다. 그러나, json 개체가 성공적으로 보내지고 php 파일에 의해받은 있지만 개체를 ​​디코딩 할 때 null 대신 가져옵니다. 누구든지 내 코드에 무슨 문제가 있는지 알고 있습니까?swison 3에서 사전에 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 에코 때 비록 널 얻을 수 있다는 것입니다 올바른 값. 또한 swift 코드에 rqst.setValue("application/json", forHTTPHeaderField: "Content-Type")을 추가하면 $ _POST [ "json"]이 설정되지 않습니다.

누구든지이 문제를 해결하는 방법을 알고 있습니다.

답변

0

실제로 description 값이 JSON과 약간 다른 Dictionary 구조로 전송됩니다.

사전은 예를 들어 : 대신 =입니다. 올바른 JSON 문자열로 사전을 다시 작성해야합니다.

첫째, 이제 귀하의 요청이 json 값을 보낼 수 있습니다

let data = NSJSONSerialization.dataWithJSONObject(dictionary, options: .AllowFragments) 

NSJSONSerialization 객체를 사용하여 NSData 예에 Dictionary 인스턴스를 변환 한 후 String

let json = String(data: data, encoding: NSUTF8StringEncoding) 

NSData 변환 .

+0

사전의 배열을 보내고 있지만 각 사전 또는 사전의 배열에 데이터 = NSJSONSerialization을 수행합니까? –

+0

배열 –

+0

을 직접 변환 할 수 있습니다. 이제 $ json 객체의 실제 객체 대신 바이트 수를 반환하고 json_decode ($ json)은 여전히 ​​null을 반환합니다. –