2016-10-13 6 views
0

NSURLConnection.sendAsynchronousRequestを使用してphpファイルに辞書の配列を送りたいと思います。私はそうする最良の方法は、各オブジェクトをそれ自身で送信することを避けるためにPHPファイルにjsonオブジェクトを送信することだと思った。しかし、jsonオブジェクトは正常に送信され、PHPファイルで受信されますが、オブジェクトをデコードすると、代わりにnullが返されます。誰でも自分のコードに何が間違っているか知っていますか?辞書のjson配列をswift 3からPHP

私のSWIFTコードは次のとおりです。

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"]が設定されません。

これを修正する方法を知っている人はいますか?

答えて

0

実際には、の値は、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を返します。 –

関連する問題