我有一个简单的csv文件
people.csv:
fname, lname, uid, phone, address John, Doe, 1, 444-555-6666, 34 dead rd Jane, Doe, 2, 555-444-7777, 24 dead rd Jimmy, James, 3, 111-222-3333, 60 alive way
我想要做的是获取CSV的每一行,将其转换为JavaScript对象,将其存储到数组中,然后将数组转换为JSON对象。
server.js:
var http = require('http'); var url = require('url'); var fs = require('fs'); var args = process.argv; var type = args[2] || 'text'; var arr = []; var bufferString; function csvHandler(req, res){ fs.readFile('people.csv',function (err,data) { if (err) { return console.log(err); } //Convert and store csv information into a buffer. bufferString = data.toString(); //Store information for each individual person in an array index. Split it by every newline in the csv file. arr = bufferString.split('\n'); console.log(arr); for (i = 0; i < arr.length; i++) { JSON.stringify(arr[i]); } JSON.parse(arr); res.send(arr); }); } //More code ommitted
我的问题是,当我在bufferString上调用.split(’\ n’)方法时,是否实际上是将CSV行转换为Javascript对象,还是有另一种方法?
通过做这个:
arr = bufferString.split('\n');
您将拥有一个包含所有行作为字符串的数组
["fname, lname, uid, phone, address","John, Doe, 1, 444-555-6666, 34 dead rd",...]
您必须使用逗号将其再次打断.split(','),然后分离标题并将其推入Javascript对象:
.split(',')
var jsonObj = []; var headers = arr[0].split(','); for(var i = 1; i < arr.length; i++) { var data = arr[i].split(','); var obj = {}; for(var j = 0; j < data.length; j++) { obj[headers[j].trim()] = data[j].trim(); } jsonObj.push(obj); } JSON.stringify(jsonObj);
然后,您将得到一个像这样的对象:
[{"fname":"John", "lname":"Doe", "uid":"1", "phone":"444-555-6666", "address":"34 dead rd" }, ... }]
看到这个FIDDLE