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
相关产品推荐
相关产品推荐

