Мне нужно преобразовать файл CSV в JSON на сервере с помощью PHP. Я использую этот script, который работает:
function csvToJSON($csv) {
$rows = explode("\n", $csv);
$i = 0;
$len = count($rows);
$json = "{\n" . ' "data" : [';
foreach ($rows as $row) {
$cols = explode(',', $row);
$json .= "\n {\n";
$json .= ' "var0" : "' . $cols[0] . "\",\n";
$json .= ' "var1" : "' . $cols[1] . "\",\n";
$json .= ' "var2" : "' . $cols[2] . "\",\n";
$json .= ' "var3" : "' . $cols[3] . "\",\n";
$json .= ' "var4" : "' . $cols[4] . "\",\n";
$json .= ' "var5" : "' . $cols[5] . "\",\n";
$json .= ' "var6" : "' . $cols[6] . "\",\n";
$json .= ' "var7" : "' . $cols[7] . "\",\n";
$json .= ' "var8" : "' . $cols[8] . "\",\n";
$json .= ' "var9" : "' . $cols[9] . "\",\n";
$json .= ' "var10" : "' . $cols[10] . '"';
$json .= "\n }";
if ($i !== $len - 1) {
$json .= ',';
}
$i++;
}
$json .= "\n ]\n}";
return $json;
}
$json = csvToJSON($csv);
$json = preg_replace('/[ \n]/', '', $json);
header('Content-Type: text/plain');
header('Cache-Control: no-cache');
echo $json;
Переменная $csv
- это строка, полученная в результате запроса cURL, который возвращает содержимое CSV.
Я уверен, что это не самый эффективный PHP-код для этого, потому что я начинающий разработчик, и мои знания PHP низки. Есть ли лучший, более эффективный способ преобразования CSV в JSON с помощью PHP?
Спасибо заранее.
Примечание.. Я знаю, что добавляю пробелы, а затем удаляю его. Я делаю это, поэтому у меня есть возможность вернуть "читаемый" JSON, удалив строку $json = preg_replace('/[ \n]/', '', $json);
для целей тестирования.
Изменить. Спасибо за ваши ответы, на их основе новый код выглядит следующим образом:
function csvToJson($csv) {
$rows = explode("\n", trim($csv));
$csvarr = array_map(function ($row) {
$keys = array('var0','var1','var2','var3','var4','var5','var6','var7','var8','var9','var10');
return array_combine($keys, str_getcsv($row));
}, $rows);
$json = json_encode($csvarr);
return $json;
}
$json = csvToJson($csv);
header('Content-Type: application/json');
header('Cache-Control: no-cache');
echo $json;