** 概要 [#va1c5ea5] AJAXでphp経由でJSONファイルをcsvで保存。 ** save_ajax.js [#f2727930] // Save Action $("#btn-save").click(function(e) { console.log("--- Save Button .. ---"); var ary_data = g_list_data; // 送るデータ形式はJSONでなければ、PHP側でエラーが出る. send_data = JSON.stringify(ary_data); console.log('send_data',send_data); // AJAX $.ajax({ url: "./php/receive_json_save.php", type: "POST", //必要ないがサーバ側との整合のために明示しておいた方がよい。 // contentType: "Content-Type: application/json; charset=UTF-8", // 必要ないがサーバ側との整合のために明示しておいた方がよい。 // dataType: 'json', //受信形式 data: send_data }).success(function(data, status, xhr) { console.log("--- << 通信成功!! >> ---"); console.log("success!!"); console.log("data =" + data); console.log("status =" + status); console.log("xhr =" + xhr); }).error(function(xhr, status, error) { // 通信失敗時の処理 console.log("--- << 通信失敗!! >> ---"); console.log("error !!"); console.log("status =" + status); console.log("error =" + error); }).complete(function(xhr, status) { // 通信完了時の処理 console.log("fin"); console.log("status =" + status); }); }); ** json_save.php [#t2a9b4b3] <?php /* Version 2 */ // TRUEの場合、デバッグを出力. $RESPONSE = TRUE; /******************************************/ // DEBUG用のサブ関数 /******************************************/ function print_response($str){ global $RESPONSE; if($RESPONSE){ print_r($str."\n"); }else{ // print_r("false"); } } /******************************************/ // JSONファイルの読み込み // * JSONファイルは連想配列に変換 /******************************************/ $json_str = file_get_contents("php://input"); # 第二引数がtrueの場合、連想配列になる $json_obj = json_decode($json_str, true); /******************************************/ // ファイルオープン // * ファイル名はYYYYMMDDHHMMSS.csv /******************************************/ date_default_timezone_set('Asia/Tokyo'); $SAVE_DIR = "./data/"; $file_name = $SAVE_DIR.date("Ymd_His").".csv"; print_response("\$file_name =".$file_name); // ファイルのオープン $fp = fopen($file_name, 'w'); /******************************************/ // 連想配列を整形し、csvに保存 /******************************************/ if($fp){ foreach($json_obj as $i => $arrays){ /* 方法 1 */ // $field = array($arrays["number"], $arrays["name"], $arrays["comment"]); // $STATE_CSV = fputcsv($fp, $field); /* 方法 2 */ // 連想配列のvalueをcsv形式に整形 // * 連想配列の値を取得する方法 array_keys($ary), array_values($ary) $field = @implode(",", @array_values($arrays)); $field = $i.",".$field."\n"; $STATE_CSV = fputs($fp, $field); // デバッグログ出力 print_response($field); } }else{ print_response("Error: fopen()\n"); } // ファイルクローズ $STATE_FCLOSE = fclose($fp); /******************************************/ // エラー処理 /******************************************/ if(!$STATE_FCLOSE){ print_response("Error: fclose($fp)\n"); } if(!$STATE_CSV){ print_response("Error: fputcsv()\n"); } ?> <?php /* Version 2 */ // TRUEの場合、デバッグを出力. $RESPONSE = TRUE; /******************************************/ // DEBUG用のサブ関数 /******************************************/ function print_response($str){ global $RESPONSE; if($RESPONSE){ print_r($str."\n"); }else{ // print_r("false"); } } /******************************************/ // JSONファイルの読み込み // * JSONファイルは連想配列に変換 /******************************************/ $json_str = file_get_contents("php://input"); # 第二引数がtrueの場合、連想配列になる $json_obj = json_decode($json_str, true); /******************************************/ // ファイルオープン // * ファイル名はYYYYMMDDHHMMSS.csv /******************************************/ date_default_timezone_set('Asia/Tokyo'); $SAVE_DIR = "./data/"; $file_name = $SAVE_DIR.date("Ymd_His").".csv"; print_response("\$file_name =".$file_name); // ファイルのオープン $fp = fopen($file_name, 'w'); /******************************************/ // 連想配列を整形し、csvに保存 /******************************************/ if($fp){ foreach($json_obj as $i => $arrays){ /* 方法 1 */ // $field = array($arrays["number"], $arrays["name"], $arrays["comment"]); // $STATE_CSV = fputcsv($fp, $field); /* 方法 2 */ // 連想配列のvalueをcsv形式に整形 // * 連想配列の値を取得する方法 array_keys($ary), array_values($ary) $field = @implode(",", @array_values($arrays)); $field = $i.",".$field."\n"; $STATE_CSV = fputs($fp, $field); // デバッグログ出力 print_response($field); } }else{ print_response("Error: fopen()\n"); } // ファイルクローズ $STATE_FCLOSE = fclose($fp); /******************************************/ // エラー処理 /******************************************/ if(!$STATE_FCLOSE){ print_response("Error: fclose($fp)\n"); } if(!$STATE_CSV){ print_response("Error: fputcsv()\n"); } ?> ** json_load.py [#l6b1dd58]