提问人:Lucas Barray 提问时间:7/24/2023 最后编辑:decezeLucas Barray 更新时间:7/24/2023 访问量:33
csv 表的第一个键是否必须位于引号之间,因此无法访问?
Is the first key of a csv table necessarily between quotes and therefore inaccessible?
问:
我有一个带有 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.['博彩公司']的工作。如何检索博彩公司的值?
答:
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未定义,无事可做。
评论
data["'Bookmaker'"]
...?引号是否只是字符串的一部分,因为它在 CSV 中是这样写的......?另一种猜测:该字符串中有一些不可见的字符,因为您的 CSV 以 BOM 开头?