csv 表的第一个键是否必须位于引号之间,因此无法访问?

Is the first key of a csv table necessarily between quotes and therefore inaccessible?

提问人:Lucas Barray 提问时间:7/24/2023 最后编辑:decezeLucas Barray 更新时间:7/24/2023 访问量:33

问:

我有一个带有 nodejs mongodb 的 react 项目,我使用 csvparser 将 csv 表中的数据转换为数据库中的数据,我注意到我的表的第一个键必须介于 coast 之间,例如:

fs.createReadStream(filePath)
    .pipe(csv({ separator: ';' })) 
    .on('data', (data) => {
      console.log(data)

答案是:

{
  'Bookmaker': 'Unibet',
  Tipster: '',
  Sport: 'Football',
  Categorie: '',
  Competition: '',
  Type_de_pari: '',
  Pari_gratuit: '',
  Live: '',
  Type: 'Simple',
  Intitule_du_pari: 'Montpellier - Lille : Plus de 1,5 buts',
  Cote: '1.35',
  Mise: '50',
  Gain: '-50',
  Bonus_de_gain: '',
  Commission: '',
  Benefice: '-50',
  Etat: 'Perdu',
  Closing_Odds: '',
  Commentaire: ''
}

从那时起,我无法访问博彩公司的价值,因为两者都console.log(数据。Bookmaker)和console.log(data.['博彩公司']的工作。如何检索博彩公司的值?

javascript reactjs csv 解析器

评论

1赞 deceze 7/24/2023
data["'Bookmaker'"]...?引号是否只是字符串的一部分,因为它在 CSV 中是这样写的......?另一种猜测:该字符串中有一些不可见的字符,因为您的 CSV 以 BOM 开头?

答:

0赞 Basir khan 7/24/2023 #1

看起来您从 csv 解析器获取的数据对象使用第一行作为标题,并且对象的键是根据第一行中的值定义的。但是,键的名称中似乎有前导或尾随空格,这会导致使用点表示法访问它们时出现问题。

要访问“Bookmaker”值,您应该使用括号表示法,但您需要确保使用正确的键名,同时考虑潜在的前导或尾随空格。这是你如何做到的:

const dataRows = [];

fs.createReadStream(filePath)
  .pipe(csv({ separator: ';' })) 
  .on('data', (data) => {
    dataRows.push(data);
  })
  .on('end', () => {
    const sanitizedKeys = Object.keys(dataRows[0]).map((key) => key.trim());
    const bookmakerKey = sanitizedKeys.find((key) => key === 'Bookmaker');

    if (bookmakerKey) {
      dataRows.forEach((data) => {
        console.log(data[bookmakerKey]);
      });
    }
  });

通过清理密钥,然后找到正确的密钥名称,您可以使用括号符号访问“博彩公司”值,而不会出现任何问题。

评论

0赞 Lucas Barray 7/24/2023
我尝试了您的解决方案,但不幸的是:返回“未定义”,就好像没有值一样,即使有一个值。如果我console.log(bookmakerKey),它会给我我的密钥名称(Bookmaker),所以它可以找到它,但它不能给我它的价值(Unibet)。if (bookmakerKey) { console.log(data[bookmakerKey]); }
0赞 Basir khan 7/24/2023
尝试更新的解决方案
0赞 Lucas Barray 7/25/2023
我尝试了新版本的代码,但它仍然console.log未定义,无事可做。