我需要使用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;
该$csv变量是由cURL请求返回的字符串,该请求返回CSV内容。
$csv
我确信这不是最有效的PHP代码,因为我是一名初学者,并且我对PHP的了解很少。 是否有更好,更有效的方法使用PHP将CSV转换为JSON?
提前致谢。
注意。 我知道我要添加空格然后将其删除,这样做是为了让我可以选择删除行以返回“可读” JSON,以$json = preg_replace('/[ \n]/', '', $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;
好了,您应该使用json_encode()函数,而不是自己构建JSON输出。还有一个用于解析CSV的函数str_getcsv():
$array = array_map("str_getcsv", explode("\n", $csv)); print json_encode($array);
但是,如果希望JSON输出保存命名字段,则必须修改$ array。