javascript - csv-parse 抛出无效的开场白 : a quote is found inside a field at line

标签 javascript node-csv-parse

我知道还有其他帖子,但似乎没有一个能解决我的问题。我正在将 csv-parse 与节点 js 一起使用。这是我要解析的 CSV header 和记录。

sku,description,productUnitOfMeasure,unitCost,retailPrice,wholesalePrice,dropShipPrice,assemblyCost,planner,comments,productId,fileUpdate,SkuStatus,Master Planning Family,Category,Sub-Category,Brand,ShortCode,Import/Domestic,Inventory Value,Master Pack Quantity,Pallet / TI / HI,40HC Quantity,Product Group ID
032406021945-GreenBay,TFAL B2080264 INIT TNS GRY SAUTE PN 8",EA,7.72,13.99,0.00,0.00,0,Whitney Ehlke-2307,,032406021945,2022-01-25,New,COOKWARE,OPENSTOCK,NONE,T-FAL,B2080264,Domestic,208.44,3,0/0/0,0,23

我无法控制这个文件。我只需要能够解析它。您会看到描述末尾有一个双引号:TFal B2080264 INI TNS GRY SAUTE PN 8"

我需要双引号保留在那里,以便将其解析为一个字段。我不断收到此错误:

Invalid Opening Quote: a quote is found inside a field at line 2.

报价不是开场白。从技术上讲,这是一个结束。但无论如何,它不会解析。

这是我目前的代码:

const parser = fs.createReadStream(filePath).pipe(
    parse({ columns: true, relax_quotes: true, escape: '\\', ltrim: true, rtrim: true })
)

我删除了一些参数并尝试了其他参数,但无济于事。有什么想法吗??

最佳答案

此代码适用于最新的 csv-parse 版本 (5.0.4)。您使用的是哪个版本的 csv-parse 包?我问是因为它looks like该选项可能最近才从 relax 重命名为 relax_quotes

所以,我认为解决方案是:

  1. 升级到最新的csv-parse,并注明relax_quotes,或者
  2. 保持当前版本的 csv-parse,并指示 relax

为了确保 relax_quotes 与当前库一起工作,我测试了以下代码并且它按预期工作:

const csv = require('csv-parse');
const fs = require('fs');

const parser = fs.createReadStream("70880341.csv").pipe(
  csv.parse({ columns: true, relax_quotes: true, escape: '\\', ltrim: true, rtrim: true })
)

const records = [];

parser.on('readable', function() {
  let record;
  while ((record = parser.read()) !== null) {
    records.push(record);
  }
});

parser.on('error', function(err) {
  console.error(err.message);
});

parser.on('end', function() {
  console.log(records);
});

结果:

[{
    sku: '032406021945-GreenBay',
    description: 'TFAL B2080264 INIT TNS GRY SAUTE PN 8"',
    productUnitOfMeasure: 'EA',
    ...
}]

关于javascript - csv-parse 抛出无效的开场白 : a quote is found inside a field at line,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70880341/

相关文章:

javascript - 管理 node-postgres 查询

javascript - 如何发布 Vue.js 组件库?

javascript - 有什么理由继续使用 var 吗?

javascript - 如何垂直对齐 float 的、流动的 div 中的内容?

javascript - 从表中删除行时,剩余的行向上/向下移动

javascript - csv-parse 解析的对象的第一个属性不可访问

node.js - 获取 CSV header 而不读取整个 Stream

javascript - 使用nodejs中的csv-parse模块忽略引号内的内容