From c78c72ecf32c060f1a620bce80f5f4d7fe11394c Mon Sep 17 00:00:00 2001 From: Cameron Sima Date: Wed, 2 Mar 2016 13:34:25 -0500 Subject: [PATCH 1/2] csv to json converter --- csvToJson/CSVToJSON.js | 36 ++++++++++++++++++++++++++++++++++++ csvToJson/sampleData.csv | 5 +++++ csvToJson/tests.js | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 csvToJson/CSVToJSON.js create mode 100644 csvToJson/sampleData.csv create mode 100644 csvToJson/tests.js diff --git a/csvToJson/CSVToJSON.js b/csvToJson/CSVToJSON.js new file mode 100644 index 0000000..1f314b5 --- /dev/null +++ b/csvToJson/CSVToJSON.js @@ -0,0 +1,36 @@ +var fs = require('fs'); +var path = require('path'); + + +function lineToJSON(headings, lines) { + result = {}; + for (var i = 0; i < headings.length; i++) { + // Remove vestigal double quotes from beginning + // and end of line strings + line = lines[i].replace(/^"|"$/g, ''); + result[headings[i]] = line; + } + return result; +} + +function convert(filepath) { + var fpath = path.join(__dirname, filepath); + var jsonArr = []; + var file = fs.readFileSync(fpath, 'utf8'); + + // Replace newlines to enforce the same style for newline + // characters across operating systems. + var lines = file.replace(/(\r\n|\r|\n)/g, '\n') + .split(/\r?\n/g); + var headings = lines.shift(); + lines.forEach(function(line) { + if (line) {; + // positive lookahead regex to avoid splitting on commas + // that appear within double-quotes + jsonArr.push(lineToJSON(headings.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/), + line.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/))); + } + }); + return jsonArr; +} +module.exports = convert; \ No newline at end of file diff --git a/csvToJson/sampleData.csv b/csvToJson/sampleData.csv new file mode 100644 index 0000000..f55b49c --- /dev/null +++ b/csvToJson/sampleData.csv @@ -0,0 +1,5 @@ +Type of Experience,Little/No Experience,Some Experience,Very Familiar +Writing software in any programming language,1,5,4 +Frontend Web Development,4,3,3 +Server-side (“backend”) Web Development,4,4,2 +"Using Git to track changes and share code (add, commit, push, pull)",2,5,3 \ No newline at end of file diff --git a/csvToJson/tests.js b/csvToJson/tests.js new file mode 100644 index 0000000..abbd348 --- /dev/null +++ b/csvToJson/tests.js @@ -0,0 +1,34 @@ +var csvToJson = require('./CSVToJSON'); +var test = require('tape'); + +expected = [ + { + "Type of Experience": "Writing software in any programming language", + "Little/No Experience": 1, + "Some Experience": 5, + "Very Familiar": 4 + }, + { + "Type of Experience": "Frontend Web Development", + "Little/No Experience": 4, + "Some Experience": 3, + "Very Familiar": 3 + }, + { + "Type of Experience": "Server-side (“backend”) Web Development", + "Little/No Experience": 4, + "Some Experience": 4, + "Very Familiar": 2 + }, + { + "Type of Experience": "Using Git to track changes and share code (add, commit, push, pull)", + "Little/No Experience": 2, + "Some Experience": 5, + "Very Familiar": 3 + } +] + +test('csv to json', function(t) { + t.plan(1); + t.equal(csvToJson('sampleData.csv'), expected); +}) \ No newline at end of file From f056a1b286dcffaba07651f42afd33dd3472c628 Mon Sep 17 00:00:00 2001 From: Cameron Sima Date: Wed, 2 Mar 2016 13:59:29 -0500 Subject: [PATCH 2/2] Fixed formatting for travis --- csvToJson/CSVToJSON.js | 61 +++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/csvToJson/CSVToJSON.js b/csvToJson/CSVToJSON.js index 1f314b5..e3350ac 100644 --- a/csvToJson/CSVToJSON.js +++ b/csvToJson/CSVToJSON.js @@ -1,36 +1,35 @@ -var fs = require('fs'); -var path = require('path'); +var fs = require('fs') +var path = require('path') - -function lineToJSON(headings, lines) { - result = {}; - for (var i = 0; i < headings.length; i++) { - // Remove vestigal double quotes from beginning - // and end of line strings - line = lines[i].replace(/^"|"$/g, ''); - result[headings[i]] = line; - } - return result; +function lineToJSON (headings, lines) { + var result = {}; + for (var i = 0; i < headings.length; i++) { + // Remove vestigal double quotes from beginning + // and end of line strings + var line = lines[i].replace(/^"|"$/g, '') + result[headings[i]] = line; + } + return result; } -function convert(filepath) { - var fpath = path.join(__dirname, filepath); - var jsonArr = []; - var file = fs.readFileSync(fpath, 'utf8'); +function convert (filepath) { + var fpath = path.join(__dirname, filepath) + var jsonArr = []; + var file = fs.readFileSync(fpath, 'utf8') - // Replace newlines to enforce the same style for newline - // characters across operating systems. - var lines = file.replace(/(\r\n|\r|\n)/g, '\n') - .split(/\r?\n/g); - var headings = lines.shift(); - lines.forEach(function(line) { - if (line) {; - // positive lookahead regex to avoid splitting on commas - // that appear within double-quotes - jsonArr.push(lineToJSON(headings.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/), - line.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/))); - } - }); - return jsonArr; + // Replace newlines to enforce the same style for newline + // characters across operating systems. + var lines = file.replace(/(\r\n|\r|\n)/g, '\n') + .split(/\r?\n/g); + var headings = lines.shift(); + lines.forEach(function(line) { + if (line) { + // positive lookahead regex to avoid splitting on commas + // that appear within double-quotes + jsonArr.push(lineToJSON(headings.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/), + line.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/))) + } + }); + return jsonArr } -module.exports = convert; \ No newline at end of file +module.exports = convert