You need to enable JavaScript to run this app. Node.js使用ya-csv解析CSV为JS对象后读取id返回undefined如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用ya-csv解析CSV为JS对象后读取id返回undefined如何解决

问题核心原因

  • 变量命名冲突:你在data事件的回调函数里将行数据参数命名为data,和全局用来存储所有解析结果的数组data重名了,函数作用域内的变量优先级更高,因此你写的data.push(data)根本没有把行数据存入全局数组,反而是尝试往当前行对象里插入数据,全局数组一直是空的,自然读取不到id属性。
  • 函数未调用:原代码只定义了csvToJson解析函数,没有主动调用,解析逻辑不会执行,也会导致读取不到数据。
  • 可选优化:你的CSV表头行末尾多了一个多余的分号,可能会生成一个空字符串的多余键,建议删除避免后续异常。

修复后代码

const csv = require('ya-csv');

const data = [];
const file = 'myFile.csv';

function loopForPrint() {
  for (var i = 0; i < data.length; i++) {
    let id = data[i].id;
    console.log(id);
  }
}

function csvToJson() {
  // 把回调的参数名改成row,避免和全局的data数组重名
  var reader = csv.createCsvFileReader(file, {columnsFromHeader: true, 'separator': ';'});
  reader.addListener('data', function(row) {
    data.push(row);
    loopForPrint();
  })
  reader.addListener('end', function() {
    console.log('end');
    // 也可以选择在end事件统一打印所有数据,避免每读一行就循环一次
    // loopForPrint();
  });
};

// 主动调用启动解析
csvToJson();

运行效果

修复后执行代码会依次打印1、2,最后输出end,可以正常取到每行的id属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 11:00:15