簡體   English   中英

由 csv-parse 解析的對象的第一個屬性不可訪問

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM