javascript - csv-parse 解析的对象的第一个属性不可访问

标签 javascript node.js node-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 在控制台输出中有单引号,而 sysID 没有。但不知道是什么原因造成的。

最佳答案

最后自己想通了...

我需要 BOM 选项。 documentation声明它应该为 UTF-8 文件设置为 true。但它默认为 false。

默认情况下,Excel 会生成以 BOM 作为 CSV 文件中第一个字符的 csv 文件。解析器将其作为 header (和键名)的一部分。 将 bom 选项设置为 true,它可以处理从 excel 或其他程序生成的 csv 文件。

const csvParser = csvParse({
  columns: true, 
  skip_empty_lines: true,
  bom: true
});

关于javascript - csv-parse 解析的对象的第一个属性不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66402555/

相关文章:

javascript - 在 Meteor.js 中将变量范围设置为模板

node.js - 获取 CSV header 而不读取整个 Stream

javascript - Joi验证: How to make values in nested json optional?

javascript - discord.js 机器人播放音频但没有声音?

database - 当在 Node.js 中从 firebird 中选择时,未知值 <Buffer d2 f3 f0 e0 e5 e2 e0 20>

javascript - csv-parse 抛出无效的开场白 : a quote is found inside a field at line

node.js - 如何使用csv-parse的读写流

javascript - JavaScript 中模式 return var && var == ='something' 的含义

javascript - 如何选择前第三个 DOM 元素的子元素?

javascript - Mootools XHR 请求 : synchronous and/or chained?