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

Node.js用csv-parser解析CSV后如何映射带空格的Variant SKU并导出JSON

问题根源定位
  • JS 点语法要求后续跟随的属性名是合法标识符,不能包含空格、特殊符号,因此item.Variant SKU这种写法本身就不符合语法规则
  • 原有比较逻辑错位:map 回调的入参i是单条完整的CSV解析对象,并非对象的属性名,将完整对象和字符串'Variant SKU'做相等比较,结果自然全部为false
可直接运行的修正代码
const csv = require('csv-parser')
const fs = require('fs')
const path = require('path')
const results = [];

// 递归创建目标存储目录,避免路径缺失导致写入报错
const targetDir = path.join(__dirname, 'src', 'data')
fs.mkdirSync(targetDir, { recursive: true })

fs.createReadStream('sales_2021-03-01_2021-04-11.csv')
  .pipe(csv())
  .on('data', (data) => results.push(data))
  .on('close', () => {
    // 用方括号语法访问带空格的属性,仅保留Variant SKU字段
    const filteredData = results.map(item => ({
      'Variant SKU': item['Variant SKU']
    }))

    console.log(filteredData)

    // 写入目标路径的JSON文件,格式化后可读性更强
    fs.writeFileSync(
      path.join(targetDir, 'file.json'),
      JSON.stringify(filteredData, null, 2),
      'utf8'
    )
  })
关键语法与逻辑说明
  • 特殊属性名访问规则:当对象属性名包含空格、特殊字符、或以数字开头时,必须使用方括号语法访问,格式为对象['字符串形式的属性名'],不受属性名格式限制
  • map 方法适配:map 会遍历数组的每一个元素,将回调返回的值拼接为新数组。修正后的逻辑会为每一条原始CSV记录,生成仅包含Variant SKU字段的新对象,自动剔除其余无关字段;如果需要输出仅包含SKU值的一维数组,而非带字段名的对象结构,可将map回调简化为results.map(item => item['Variant SKU'])
  • 写入逻辑兼容:使用fs.mkdirSync配合recursive: true参数,可自动创建多级不存在的目录,无需手动提前建文件夹;写入JSON时通过null, 2参数实现格式化输出,比紧凑结构更易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 21:27:00