[英]First property inaccsesible of objects parsed by 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;
}
Output -
Scanning data for 2 systems..
{ 'userID': '20', sysID: '50' }
undefined // <== The Problem
50
我注意到控制台 output 中的第一列鍵userID
有單引號,而sysID
沒有。 但不知道是什么原因造成的。
最后自己想通了...
我需要 BOM 選項。 文檔聲明它應該為 UTF-8 文件設置為 true。 但它默認為假。
Excel 默認生成 csv 文件,其中 BOM 作為 CSV 文件中的第一個字符。 這被解析器作為 header(和鍵名)的一部分拾取。 將 bom 選項設置為 true,它可以處理從 excel 或其他程序生成的 csv 文件。
const csvParser = csvParse({
columns: true,
skip_empty_lines: true,
bom: true
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.