Skip to content
9 changes: 9 additions & 0 deletions csvToJsonReader/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use strict';

var csvJson = require('./csvToJson');
console.log('starting');
var data = csvJson().readFile('testfile.csv')
console.log(data)

console.log('Asynchronous conversion using streams')
csvJson().readFileAsync('testfile.csv')
77 changes: 77 additions & 0 deletions csvToJsonReader/csvToJson.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
(function () {
var fs = require('fs')
var csvReader = require('fast-csv')

module.exports = function(){

var methods = {};

methods.readFileAsync = function(filename) {
var stream = fs.createReadStream(filename);

var lineNumber = 0;
var headers = {};
var csvString = '';
csvReader.fromStream(stream)
.transform(function(data) {
if(lineNumber === 0) {
headers = data.map(function(d) {
return d.trim();
});
lineNumber++;
return;
}

lineNumber++;

var line = data.map(function(d) {
return d.trim();
})
csvString = csvString + ' ' + methods.csvJsonLine(line, headers);
console.log(csvString);
})
.on('data', function(data) {
//console.log(data);
})
.on('end', function() {
console.log('done');
});
};

methods.csvJsonLine = function(csvLine, headers) {
var obj = {};

for(var j = 0; j < headers.length; j++) {
obj[headers[j]] = csvLine[j];
}

return JSON.stringify(obj);
};

methods.readFile = function(filename) {
var buffer = fs.readFileSync(filename);

var lines = buffer.toString().split('\n');

var headers = lines[0].split(',').map(function(d) {
return d.replace(/[\r]/g, '').trim();
});

var numberOfLines = lines.length;
var objArray = [];

for(var j = 1; j < numberOfLines; j++) {
var line = lines[j].split(',').map(function(d) {
return d.replace(/[\r]/g, '').trim();
});
var jsonObj = methods.csvJsonLine(line, headers);
objArray.push(jsonObj);
}

return objArray;
}

return methods;
};

}());
3 changes: 3 additions & 0 deletions csvToJsonReader/testfile.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
header1, header2, header3
one, two, three
four, five, six
13 changes: 13 additions & 0 deletions csvToJsonReader/tests/testcsvJsonLine.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
var test = require('tape')
var csvJson = require('../csvToJson')

test('oneLineFile', function (t) {
var headers = ['header1', 'header2']
var line = ['one', 'two']

var result = csvJson().csvJsonLine(line, headers)

t.equal(result, '{"header1":"one","header2":"two"}')

t.end()
})
9 changes: 9 additions & 0 deletions csvToJsonReader/tests/testreadFile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
var test = require('tape');
var csvJson = require('../csvToJson');

test('simpleFile', function(t) {
var expectedResult = ['{"header1":"one","header2":"two","header3":"three"}','{"header1":"four","header2":"five","header3":"six"}'];
var result = csvJson().readFile('./csvToJsonReader/testfile.csv');
t.deepEqual(result, expectedResult);
t.end();
});
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"description": "Tabular Data support for Dat/hypercore",
"main": "index.js",
"scripts": {
"test": "standard && tape test/*.js"
"test": "tape csvToJsonReader/tests/*.js"
},
"repository": {
"type": "git",
Expand All @@ -25,6 +25,7 @@
},
"devDependencies": {
"standard": "^6.0.5",
"tape": "^4.4.0"
"tape": "^4.5.0",
"fast-csv": "^1.0.0"
}
}