Node.JS / Express.JS:将数据从CSV文件正确转换为JSON

时间:2017-09-10 03:02:55

标签: javascript json node.js csv express

我打算从CSV文件加载数据,并在Express Router 中将其作为JSON数据发送

我的CSV看起来像这样:

  • 无标题
  • 我的行分隔符只是“/ n”
  • 我的值在“”

    “2171106”,“2017-07-03 00:27:24”,“法国”,“3”,“桌面”,“Mac”,“火狐”,“2170248”,“77.98” “800309”,“2017-07-03 03:23:21”,“法国”,“9”,“桌面”,“GNU / Linux”,“Safari”,“2170296”,“85.39” “805789”,“2017-07-03 03:34:32”,“法国”,“1”,“平板电脑”,“iOS”,“移动Safari”,“2170299”,“61.49” “2171167”,“2017-07-03 04:42:47”,“法国”,“1”,“桌面”,“Windows”,“Chrome”,“2170314”,“39.99” “2171170”,“2017-07-03 04:50:02”,“法国”,“1”,“桌面”,“Windows”,“Chrome”,“2170320”,“20.89” “838601”,“2017-07-03 05:48:38”,“法国”,“1”,“智能手机”,“iOS”,“移动Safari”,“2170323”,“66.88” “2171173”,“2017-07-03 06:09:28”,“法国”,“1”,“桌面”,“Windows”,“Microsoft Edge”,“2170407”,“57.77” “1659566”,“2017-07-03 06:28:08”,“法国”,“1”,“智能手机”,“Android”,“Chrome手机”,“2170416”,“32.99” “835619”,“2017-07-03 06:46:00”,“法国”,“4”,“桌面”,“Windows”,“Firefox”,“2170419”,“203.93” “773872”,“2017-07-03 06:51:14”,“法国”,“8”,“平板电脑”,“iOS”,“移动Safari”,“2170422”,“285.79” “2171241”,“2017-07-03 06:54:30”,“法国”,“1”,“桌面”,“Mac”,“Safari”,“2170425”,“29.49” “2171238”,“2017-07-03 07:02:48”,“法国”,“1”,“桌面”,“Windows”,“火狐”,“2170434”,“49.95” “1570588”,“2017-07-03 07:08:09”,“法国”,“1”,“桌面”,“Windows”,“Microsoft Edge”,“2170437”,“61.06” “2111374”,“2017-07-03 07:08:21”,“英国”,“1”,“平板电脑”,“iOS”,“移动Safari”,“2170440”,“36.58” “1604941”,“2017-07-03 07:18:38”,“法国”,“2”,“平板电脑”,“iOS”,“移动Safari”,“2170452”,“30.89” “2095884”,“2017-07-03 07:25:34”,“法国”,“1”,“平板电脑”,“iOS”,“移动Safari”,“2170458”,“65.79” “2171259”,“2017-07-03 07:26:48”,“法国”,“1”,“桌面”,“Windows”,“火狐”,“2170461”,“62.67” “860366”,“2017-07-03 07:30:46”,“法国”,“1”,“桌面”,“Windows”,“Chrome”,“2170464”,“137.67”

为了更好地展示它,就是这样:

enter image description here 我想将这些数据解析为一个对象,并将其作为json发送到express。

我使用了几个库: csvjson,csvtojson,papaparse ... 但每次转换都出现问题。

这是我的服务器代码:

var express = require("express");
var app     = express();
var path    = require("path");
var fs = require('fs');
var Converter  = require("csvtojson").Converter;

var fileStream = fs.createReadStream("data.csv");
var jsonData;
//new converter instance
var converter = new Converter({constructResult:true});

//end_parsed will be emitted once parsing finished
converter.on("end_parsed", function (jsonObj) {
    jsonData = jsonObj
});
fileStream.pipe(converter);

app.get("/list",function(req,res){
    res.json(jsonData);
});

app.listen(3000);
console.log("Running at Port 3000");

运行时,转换出错,显示如下数据: enter image description here

如你所见,这是完全错误的: 这里是第一个输出的元素: enter image description here 几乎所有的库都以相同的错误方式转换它,我认为我的代码中有一个缺少配置(可能列出行列表)

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

来自csvtojson API文档:

noheader:指示csv数据没有标题行,第一行是数据行。默认为false。

所以也许在你的Converter构造中添加noheader:true。