You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js解析CSV生成的JavaScript对象无法访问Name属性求助

问题原因

你访问不到Name属性的核心原因是CSV文件头部携带了UTF-8 BOM(字节顺序标记),这是一个Unicode编码为U+FEFF的零宽不可见字符,会附加在解析后对象的第一个键名开头。你肉眼看到的键名是Name,实际完整键名是\ufeffName,和你输入的纯Name字符串不匹配,所以返回undefined。

验证方法

你可以执行以下代码确认问题:

const firstKey = Object.keys(data)[0]
// 打印第一个键的首个字符Unicode编码,输出为feff即可确认是BOM导致的问题
console.log(firstKey.charCodeAt(0).toString(16))

解决方法

方法1:解析CSV前先去除BOM(推荐)

使用strip-bom-stream依赖在读取文件流时直接去掉BOM,再交给CSV解析器处理:

const stripBom = require('strip-bom-stream');

fs.createReadStream("data.csv")
.pipe(stripBom())
.pipe(csv())
.on("data", (data) => {
  // 此时可直接正常访问data["Name"]
})

多数常用的Node.js CSV解析库也自带BOM处理配置,你可以直接在csv()初始化时添加bom: true参数开启自动去除BOM的功能。

方法2:拿到数据后手动清理键名

如果不想新增依赖,也可以在拿到单条数据后统一去除所有键名开头的BOM字符:

const cleanData = Object.fromEntries(
  Object.entries(data).map(([key, val]) => [key.replace(/^\ufeff/, ''), val])
)
console.log(cleanData["Name"]) // 正常输出Niger

内容的提问来源于stack exchange,提问作者OkOutside84

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:24:03