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

Node.js中使用csv-parse模块如何忽略双引号内的分隔符

解决方案

问题根因

你的csv-parse配置没有显式指定双引号作为字段包裹符,导致模块没有忽略双引号内部的分隔符,直接把01|0009里的|识别成了列分隔符,把原本的第二列切成了两部分,最终出现行长度不一致的报错。

修改步骤

  1. 调整parseCsv的配置参数,显式指定双引号为包裹符,开启引号内部内容不解析分隔符的逻辑
  2. 补充Promise的错误 reject 逻辑,避免异常时Promise一直处于 pending 状态

修改后的getData函数代码

const getData = (data, delimiter) => {
  return new Promise((resolve, reject) => {
    const rows = []
  
    const rtrim = delimiter === '|' || delimiter === '@'? false : true

    const parser = parseCsv(
      data,
      {
        delimiter,
        relax: true,
        ltrim: true,
        rtrim,
        // 新增以下两个配置
        quote: '"', // 显式指定双引号为字段包裹符,内部的分隔符会被自动忽略
        relax_quotes: true // 可选,兼容未闭合的引号场景,根据你的实际数据选择开启
      }
    )
    
    parser.on('readable', () => {
      for(let data = parser.read(); data; data = parser.read()){
        rows.push(data)      
      }
    })
  
    parser.on('end', () => {
      resolve(
        delimiter === '|' ?
        rows : 
        rows.flat(1)
      )
    })
  
    parser.on('error', err => {
      console.log(err)
      reject(err) // 补充错误抛出逻辑
    })
  })
}

如果你使用的是5.x及以上版本的csv-parse,需将relax_quotes替换为驼峰格式的relaxQuotes。

效果说明

修改后第一层用|解析时,会自动跳过双引号内部的|,样例数据的第二行会正确解析为2列,不会再触发长度不匹配的报错。后续用@、;解析的逻辑也会自动跳过对应分隔符在双引号内的情况,符合你的解析需求。


内容的提问来源于stack exchange,提问作者Gabriel Lüders

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:51:03