Создать пользовательский экспорт CSV из данных JSON - PullRequest
0 голосов
/ 27 апреля 2018

На одной из моих вкладок ModelAdmin у меня есть столбец, содержащий данные в кодировке JSON, которые я хочу преобразовать в таблицу CSV и экспортировать. Большинство вопросов, которые я видел, были экспорт строк данных непосредственно из таблиц, но как насчет извлечения данных из одного из столбцов, прежде чем преобразовать их в таблицу CSV для экспорта.

Любые идеи будут с благодарностью.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

@ KikoGarcia, спасибо за вклад. Однако было бы проще сделать это следующим образом. Кроме того, когда я попробовал ваш код, он копирует всю страницу в экспортированный файл CSV. После fclose();.

должно быть указано exit();.

После преобразования данных JSON в массив мне пришлось пройтись по циклу и создать еще один массив, поскольку в нем есть вложенные данные, которые мне нужны для экспорта. Получив окончательный массив, я вызываю эту функцию, т.е. $this->arrayToCSVExport($finalArr);

public function arrayToCSVExport($array, $filename = "backup.csv") {
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="'.$filename.'";');
$bookdata = fopen('php://output', 'w');

// output the column headings
fputcsv($bookdata, array(
      'Customer Type',
      'Company Name',
      'Contact First Name',
      'Contact Last Name',
      'Contact Phone',
      'Contact Mobile',
      'Contact Email',
      'Contact Address',
      'Course Name',
      'Event ID',
      'Student First Name',
      'Student Last Name',
      'Student Phone',
      'Student Mobile',
      'Student Email',
      'Student Address',
      'Purchase Order'
));
foreach ($array as $user) {
   fputcsv($bookdata, $user);
}
fclose($bookdata);
exit();

}

0 голосов
/ 27 апреля 2018

Поскольку вы используете PHP и хотите выводить как CSV, первое, что вам нужно сделать, - это преобразовать этот JSON в массив. Затем вы можете использовать некоторые функции PHP, чтобы запросить результат в виде CSV. Давайте код:

$arr = json_decode($jsonInput, true);
if(empty($arr)) {
     die("INVALID JSON");
}
$filename = "your-filename.csv";
$now = gmdate("D, d M Y H:i:s");
header("Expires: $now GMT");
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
header("Last-Modified: {$now} GMT");  
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/csv");
header("Content-Disposition: attachment;filename=$filename");
header("Content-Transfer-Encoding: binary");
$df = fopen('php://output', 'w');
fputs($df, $bom = ( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
fputcsv($df, array_keys(reset($arr)), ';');
foreach($arr as $row) {
    fputcsv($df, $row, ';');
}
fclose($df);
...