公開日:2015/08/11
PHPでJSON形式のデータをPOSTする方法をメモする。
JSONデータの生成
連想配列でデータをつくってjson_encode()でJSON形式の文字列に変換する。
$data = array(
'test1'=>'aaa',
'test2'=> array(
array(
'test3'=>'bbb'
)
),
'test4'=> array(
array(
'test5'=>'ccc',
'test6'=>'ddd'
)
)
);
$data_json = json_encode($data);
表示してみる。
echo $data_json;
できてる。
{"test1":"aaa","test2":[{"test3":"bbb"}],"test4":[{"test5":"ccc","test6":"ddd"}]}
あとは送信するだけ。
POST送信
POSTはcURLでGET/POST送信する方法(PHP)の応用。
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://posttestserver.com/post.php');
$result=curl_exec($ch);
echo 'RETURN:'.$result;
curl_close($ch);
CURLOPT_HTTPHEADERでContent-Typeにapplication/jsonを設定してやるくらい。
JSONデータを受け取る場合
サーバの戻り値がJSONデータの場合はjson_decode()で連想配列を取得できる。
$result=curl_exec($ch);
$res_json = json_decode($result , true );
echo $res_json['return1'];
CURLOPT_RETURNTRANSFERにtrueを指定してcurl_exec()の戻り値を文字列で受け取ったらjson_decode()で変換する。
json_decode()はデフォルトだとstdClassが返るけど第二パラメータにtrueを指定すると連想配列が返る。
あとはは取り出したいキーを指定すればOK。