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

2024-03-29

我正在使用以下内容解析 csv 文件csv 解析 https://csv.js.org/parse/ -

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

我注意到第一列键userID在控制台输出中有单引号,而sysID没有。但不知道是什么原因造成的。


最后我自己想通了...

我需要bom选项。这文档 https://csv.js.org/parse/options/bom/#hidden-bom-in-output声明对于 UTF-8 文件应将其设置为 true。但默认设置为 false。

MS Excel 生成的 CSV 文件中包含隐藏的 BOM 字符。解析器将其作为标头(和键名称)的一部分拾取。 将 bom 选项设置为 true 会使 csv-parse 与包含或不包含 bom 字符的 utf-8 文件兼容。

初始化 csv-parse 时设置 bom 选项 -

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

我不太清楚为什么 Excel 将这个 bom 字符添加到 csv 文件中。引用自维基百科BOM https://en.wikipedia.org/wiki/UTF-8#Byte_order_mark -

Unicode 标准既不要求也不建议对 UTF-8 使用 BOM,但警告可能会在从另一种编码转码的文件开头遇到该 BOM

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

csv-parse 解析的对象的第一个属性不可访问 的相关文章

随机推荐

  • Find() 与Where().FirstOrDefault()

    我经常看到人们使用Where FirstOrDefault 进行搜索并获取第一个元素 为什么不直接使用Find 对方有优势吗 我看不出有什么不同 namespace LinqFindVsWhere class Program static
  • 使用正则表达式修剪电话号码

    可能是一个简单的正则表达式问题 如何从电话号码中删除除前导 之外的所有非数字 i e 012 3456 gt 0123456 1 234 56789 gt 123456789
  • 为什么模式匹配一​​个单词而有两个相同的单词?

    请看一下这个 如你所见 只有one匹配于regex101 但浏览器匹配two相同的单词 所以为什么regex101无法匹配第二个单词 无论如何我需要匹配这两个词 或更多 如果存在的话 注意到它与以下内容无关g旗帜 因为我在小提琴中使用过它
  • CreateProcessAsUser 和 LogonUser 无密码

    使用 WTSGetActiveConsoleSessionId 和 WTSQueryUserToken 我知道作为 SYSTEM 运行的服务可以在当前桌面上启动应用程序 http blog dcuktec com 2009 05 pytho
  • 防止 Azure B2C 自定义策略中的电子邮件更改

    有没有办法防止密码重置期间更改电子邮件 有密码恢复的标准政策 但我不喜欢在那里更改电子邮件 该电子邮件用作与其他应用程序集成的 ID 密码重置期间更改电子邮件不会更改用户的实际电子邮件 如果用户验证电子邮件但随后意识到这不是他们想要重置密码
  • python 使用 numpy 进行位移

    我正在使用 64 位无符号整数 并在位移后比较该值 然后再解码其余位值 我正在迭代数百万个值并尝试最大程度地减少处理时间 问题是 uint64 和 numpy uint64 都不支持位移位 我试图避免使用 int64 以避免负值 示例数据
  • PHP HTML 净化器和 MathML

    有没有什么简单的方法可以允许所有 MathML 标签在 HTML Purifier 中具有属性 我试图将所有 MathML 标签从https developer mozilla org en US docs Web MathML Eleme
  • 是否有实体框架 7 数据库优先 POCO 生成器?

    我一直在为我正在开发的一个新项目使用 Entity Framework 7 和 ASP NET 5 但遇到了障碍 我所在的团队使用 DBA 优先的开发方法 即数据库由 DBA 设计 然后开发人员更改代码以补偿模型更改 使用 EF6 效果很好
  • 如何使图像高度适合并置文本高度

    我有一个图像和一个并排的文本 图像在左边 文本在右边 关于如何根据文本段落高度 以及宽度与高度保持比例 调整图像高度的任何想法 而不是将文本环绕在图像周围 这是我所能做到的 div style display table width 100
  • Flask jsonify 支持 UTF-8 吗?

    我一直在使用 Flasks 和 jsonify 进行实验 有用 但不支持 utf 8 字符 土耳其字符 我正在使用字典 if api key in key list quotes ataturk Hayatta En Hakiki Murs
  • 如何在启动时完全停止 Android Studio 索引/扫描/构建?

    我怎样才能停止这个索引或任何这个启动过程 它是做什么用的 它为什么这么做 我可以在以后最需要的时候推迟加载这么大的进程吗 我通过无效并重新启动解决了这个问题 我在循环中遇到了这个问题 在没有运行或构建任何东西的情况下不停地索引 文件 gt
  • ModelAttribute 可以是原始的吗?

    我在 Spring MVC 3 0 中的 ModelAttribute 上遇到了一个奇怪的问题 当我在本地主机部署应用程序时 它工作正常 但是当我在远程服务器上部署该应用程序时 每次用户访问特定操作时它都会失败 并出现错误 ERROR my
  • 互斥的powershell参数

    SCENARIO 我正在使用 Visual Studio 2008 和 NET 3 5 为 Powershell 2 0 编写 cmdlet 该 cmdlet 需要 3 个参数 我想要的 cmdlet 语法是这样的 cmdletname f
  • Apache2中可以有两个密码文件吗?

    我可以在 apache2 sites enabled 000 default 配置文件中包含两个 AuthUserFile 指令吗
  • Google App Engine“搜索”的测试床存根

    我正在尝试使用开发应用程序服务器在 Python 中测试 Google App Engine 的新全文搜索功能 是否有存根search https developers google com appengine docs python se
  • Spark:“无法使用 UnspecifiedFrame。这应该在分析过程中进行转换。请提交错误报告”

    Spark 2 3 0 与 Scala 2 11 我正在尝试编写一个自定义聚合器并在每个窗口函数上运行它这些文档 https spark apache org docs latest sql programming guide html t
  • Google Guava 供应商示例

    请用合适的例子解释Supplier in Guava 接口的使用 The Supplier接口只是一个返回值的无参数函数的抽象 它是一个获取对象的某个或多个实例的方法 因为它很通用 所以可以用来做很多事情 贾里德解释了如何Multimaps
  • 如何设置 Heroku Postgresql 的日志记录级别?

    将 Heroku 与 Postgresql 插件结合使用 在查看我的日志后 似乎 postgresql 正在记录每个 单个 事务 我知道您可以通过执行类似的操作来设置日志级别 https www postgresql org docs 9
  • 字体和颜色 - #region

    是否可以更改 region 和 endregion 的字体颜色 我在以下位置找不到这个元素extras options fonts and colors 它在这里 TOOLS gt Options gt Environment gt Fon
  • csv-parse 解析的对象的第一个属性不可访问

    我正在使用以下内容解析 csv 文件csv 解析 https csv js org parse userID sysID 20 50 30 71 但是 在返回的对象上 无法访问从第一列创建的属性userID 这是我的代码 async fun