I have a simple csv file
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
What I want to do it get each line of the CSV, convert it to a JavaScript object, store them into an array, and then convert the array into a JSON object.
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
My question is if I am actually converting that CSV lines into Javascript objects when I call the .split(‘n’) method on bufferString or is there another way of doing so?
Advertisement
Answer
By doing this:
arr = bufferString.split('n');
you will have an array containing all rows as string
["fname, lname, uid, phone, address","John, Doe, 1, 444-555-6666, 34 dead rd",...]
You have to break it again by comma using .split(',')
, then separate the headers and push it into an Javascript Object:
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);
Then you will have an object like this:
[{"fname":"John", "lname":"Doe", "uid":"1", "phone":"444-555-6666", "address":"34 dead rd" }, ... }]
See this FIDDLE