You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中CSV转JSON解析时首个键自动加单引号的问题及解决

问题

使用Node.js的csv.parse模块解析CSV为JSON时,每个对象的第一个键(比如ObjNr)会自动被添加单引号,更换首列后新的首键依然会出现这个情况,如何避免?

CSV示例

ObjNr;Brand;Model;Manufactured;kW;Price
2022-15-06#1;Mercedes;EQS-450;2022;363;94000
2022-15-06#2;Mercedes;EQA-350;2021;295;43556

后端代码

app.post('/testcsv', uploadCSV.single('car_csv'), async (req, res) => {
  try {
    let csvJson;
    const csvData = req.file.buffer.toString();

    // Parse CSV data to JSON; first row is header;
    csv.parse(
      csvData,
      { delimiter: ';', columns: true},
      async (err, data) => {
        if (err) {
          console.error('CSV parsing error:', err);
        } else {
          csvJson = data;
          console.log(csvData);
          console.log(csvJson);
          res.status(200).send(csvJson);
        }
      }
    );
  } catch (err) {
    console.error(err);
  }
});

输出结果

[
  {
    'ObjNr': '2022-15-06#1',
    Brand: 'Mercedes',
    Model: 'EQS-450',
    Manufactured: '2022',
    kW: '363',
    Price: '94000'
  },
  {
    'ObjNr': '2022-15-06#2',
    Brand: 'Mercedes',
    Model: 'EQA-350',
    Manufactured: '2021',
    kW: '295',
    Price: '43556'
  }
]

解决方案

原因分析

这个现象不是csv.parse模块主动给键添加单引号,而是CSV文件的首行开头存在不可见的BOM(字节顺序标记)。当buffer转字符串时,BOM会附着在第一个表头的最前面,导致该键名实际包含了不可见的特殊字符——在控制台输出或JSON格式化时,为了区分这个带特殊字符的非标准标识符,才会给键名加上单引号(正常合法的标识符不需要引号包裹)。

解决步骤

  1. 移除BOM字符:在将buffer转为字符串后,手动清除开头的BOM,用正则表达式即可实现:
const csvData = req.file.buffer.toString().replace(/^\uFEFF/, '');
  1. 验证效果:修改后csv.parse拿到的表头不再包含BOM,解析后的键名会和其他键一样正常显示,不会再出现单引号。

修改后的完整代码片段:

app.post('/testcsv', uploadCSV.single('car_csv'), async (req, res) => {
  try {
    let csvJson;
    // 移除开头的BOM字符
    const csvData = req.file.buffer.toString().replace(/^\uFEFF/, '');

    csv.parse(
      csvData,
      { delimiter: ';', columns: true},
      async (err, data) => {
        if (err) {
          console.error('CSV parsing error:', err);
        } else {
          csvJson = data;
          console.log(csvJson);
          res.status(200).send(csvJson);
        }
      }
    );
  } catch (err) {
    console.error(err);
  }
});

额外提示

如果CSV文件是用Excel生成的,在UTF-8编码下很容易自动添加BOM。后续创建CSV文件时,选择UTF-8无BOM编码格式,就能从根源避免这个问题。

内容的提问来源于stack exchange,提问作者zuzuzuu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:42:48