尝试将csv文件解析为对象数组

时间:2019-04-29 21:29:02

标签: javascript node.js csv

我已经在我的应用程序中存储了CSV文件。我想将其转换为对象数组。 我正在使用csv-parse。 https://www.npmjs.com/package/csv-parse

仅需要csv文件的错误消息

错误:

  

成分号,成分说明,周期数              ^

     

SyntaxError:无效或意外的令牌

const parse = require('csv-parse/lib/sync');
const assert = require('assert');
const router = require('express').Router();
const count = require("./csv/IngCountCycle.csv");

router.get('/', function () {
    console.log("HI");

    const input = `
"key_1","key_2"
"value 1","value 2"
`;
    const records = parse(input, {
        columns: true,
        skip_empty_lines: true
    });

    console.log(records)
    //output ([{key_1: 'value 1', key_2: 'value 2'}])
});

module.exports = router;

test.csv

Ingredient #, Ingredient Description, Cycle Count
1,GUACAMOLE,Annually,
2,GUACAMOLE,Period,
3,GUACAMOLE,Weekly,
4,GUACAMOLE,Custom

testParse.js

const parse = require('csv-parse/lib/sync');
const assert = require('assert');
const router = require('express').Router();
const count = require("./csv/IngCountCycle.csv");

router.get('/', function () {
    const input = count;
    const records = parse(input, {
        columns: true,
        skip_empty_lines: true
    });

    console.log(records)
});

module.exports = router;

2 个答案:

答案 0 :(得分:0)

似乎CSVParse无法解释行分隔符。您能确认您使用的行分隔符受支持的选项之一是specified in the docs(检查选项record_delimiter)吗?

然后,尝试明确说明所使用的分隔符,如下所示:

const records = parse(input, {
    columns: true,
    skip_empty_lines: true,
    record_delimiter: "\n"
});

答案 1 :(得分:0)

第1、2和3行上有一个额外的(逗号),但第4行没有。您的标题行有3个逗号。您要么需要先清理数据,要么使用一些代码来弥补数据中的这种差异。