javascript - 由 csv-parse 解析的对象的第一个属性不可访问
问题描述
我正在使用csv-parse 解析具有以下内容的 csv 文件-
userID,sysID
20,50
30,71
但是,在返回的对象上,无法访问从第一列创建的属性userID
。
这是我的代码——
async function main(){
let systemIDs = await getSystemIds('./systems.csv');
console.log(`Scanning data for ${systemIDs.length} systems..`);
console.log(systemIDs[0]);
console.log(systemIDs[0].userID); // This prints undefined
console.log(systemIDs[0].sysID); // This prints the correct value
}
async function getSystemIds(path){
let ids= [];
await new Promise ((resolve,reject)=>{
const csvParser = csvParse({columns:true, skip_empty_lines: true});
FS.createReadStream(path)
.pipe(csvParser)
.on('readable', ()=>{
let record ;
while(record = csvParser.read()) {
ids.push(record);
}
})
.on('finish',()=>{
resolve();
});
});
return ids;
}
输出 -
Scanning data for 2 systems..
{ 'userID': '20', sysID: '50' }
undefined // <== The Problem
50
我注意到控制台输出中的第一列键userID
周围有单引号,而 assysID
没有。但不知道是什么原因造成的。
解决方案
最后自己想通了...
我需要 BOM 选项。文档声明它应该为 UTF-8 文件设置为 true 。但它默认为假。
默认情况下,Excel 会生成 csv 文件,其中 BOM 作为 CSV 文件中的第一个字符。这被解析器作为标题(和键名)的一部分拾取。将 bom 选项设置为 true,它可以处理从 excel 或其他程序生成的 csv 文件。
const csvParser = csvParse({
columns: true,
skip_empty_lines: true,
bom: true
});
推荐阅读
- visual-studio - CMake - 如何在安装(目标)中安装(目录)?
- google-apps-script - 如何根据查看文档的 Google 帐户对 Google 表格中的列进行编程,使其从用户输入中灰显
- dotnetnuke - 如何在 DNN Manifest 中正确引用程序集?
- qt - 如何在作为Repeater的孩子的gridview中获取属性
- javascript - 创建代码后,如何给它一个数据库?
- ansible - Ansible 将自身更新到新版本会带来什么问题
- javascript - 为什么不能创建盒子元素?
- database - 整合不同位置的数据库,创建统一的数据库
- python - 在python中使用硒的正则表达式银行账户余额
- bash - 系统不保存 .bash_profile 并在启动 zch 时获取它