一尘不染

使用PHP将CSV转换为JSON吗?

ajax

我需要使用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内容。

我确信这不是最有效的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;

阅读 208

收藏
2020-07-26

共1个答案

一尘不染

好了,您应该使用json_encode()函数,而不是自己构建JSON输出。还有一个用于解析CSV的函数str_getcsv():

$array = array_map("str_getcsv", explode("\n", $csv));
print json_encode($array);

但是,如果希望JSON输出保存命名字段,则必须修改$ array。

2020-07-26