Sunday, May 12, 2024
 Popular · Latest · Hot · Upcoming
146
rated 0 times [  149] [ 3]  / answers: 1 / hits: 46761  / 9 Years ago, mon, february 16, 2015, 12:00:00

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?


More From » node.js

 Answers
116

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


[#67805] Friday, February 13, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
nadineannabellet

Total Points: 464
Total Questions: 94
Total Answers: 97

Location: Maldives
Member since Tue, Dec 21, 2021
2 Years ago
;