Ver*_*onW 10 php csv ajax json curl
我需要使用PHP 将CSV文件转换为服务器上的JSON.我正在使用这个有效的脚本:
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;
Run Code Online (Sandbox Code Playgroud)
该$csv
变量是由cURL请求产生的字符串,该请求返回CSV内容.
我确信这不是最有效的PHP代码,因为我是一名初学者,而且我对PHP的了解很少.有没有更好,更有效的方法使用PHP将CSV转换为JSON?
提前致谢.
注意.我知道我正在添加空格然后删除它,我这样做,所以我可以选择通过删除行来返回"可读"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;
Run Code Online (Sandbox Code Playgroud)
mar*_*rio 23
那么有json_encode()函数,您应该使用它而不是自己构建JSON输出.并且还有一个用于解析CSV的函数str_getcsv():
$array = array_map("str_getcsv", explode("\n", $csv));
print json_encode($array);
Run Code Online (Sandbox Code Playgroud)
但是,如果希望JSON输出保存命名字段,则必须调整$数组.
我修改了问题中的答案,使用CSV的第一行作为数组键.这样做的好处是不必对函数中的密钥进行硬编码,从而允许它适用于任何带有列标题和任意列数的CSV.
这是我的修改版本:
function csvToJson($csv) {
$rows = explode("\n", trim($csv));
$data = array_slice($rows, 1);
$keys = array_fill(0, count($data), $rows[0]);
$json = array_map(function ($row, $key) {
return array_combine(str_getcsv($key), str_getcsv($row));
}, $data, $keys);
return json_encode($json);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15973 次 |
最近记录: |