csv表的第一个键是否必须在引号之间,因此不可访问?

yptwkmov  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(66)

我有一个与nodejs mongodb的react项目,我使用csv解析器将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: ''
}


从那时起,我就不能访问bookmaker的值了,因为console.log(data.Bookmaker)和console.log(data.['bookmaker']都不起作用。如何检索博彩公司值?

laik7k3q

laik7k3q1#

看起来像是从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]);
      });
    }
  });

字符串
通过清理键,然后找到正确的键名,您可以使用括号表示法访问“庄家”值,没有任何问题。

相关问题