Skip to content

Instantly share code, notes, and snippets.

@stephenmathieson
Last active August 29, 2015 13:57
Show Gist options
  • Save stephenmathieson/9370493 to your computer and use it in GitHub Desktop.
Save stephenmathieson/9370493 to your computer and use it in GitHub Desktop.

hilton-csv

Convert Hilton's stupid CSV thing to JSON.

API

convertFile(file, fn)

Convert the given CSV file to JSON, invoking fn(err, obj).

Example

Run this:

$ node example

License

MIT

Brand Category Alt Text Small File Name Large File Name
Conrad BUSINESS A woman smiling and looking straight ahead. Network and Business Conrad_business_01_small.jpg Conrad_business_01_large.jpg
Conrad BUSINESS A Stethascope laying on a chart. Network...Relate business_14_small.jpg business_14_large.jpg
Conrad BUSINESS Three men and three women sitting at a conference table looking at a computer monitor on the wall. Network and Business. Conrad_business_02_small.jpg Conrad_business_02_large.jpg
Conrad BUSINESS A range of snow capped mountains with clouds in the sky. Inspire…Excel. business_15_small.jpg business_15_large.jpg
Conrad BUSINESS Three women and two men smiling during a meeting. Network…Relate. business_01_small.jpg business_01_large.jpg
Conrad BUSINESS A range of snow capped mountains with clouds in the sky. Meditate…Motivate. business_16_small.jpg business_16_large.jpg
Conrad BUSINESS Empty chairs around a boardroom table. Network…Relate. business_02_small.jpg business_02_large.jpg
Conrad BUSINESS Zeros and ones flowing through a map of the world. business_17_small.jpg business_17_large.jpg
Conrad BUSINESS A range of snow capped mountains with clouds in the sky. Meditate…Relax. business_03_small.jpg business_03_large.jpg
var convertFile = require('./');
var fs = require('fs');
var ls = fs.readdirSync;
var write = fs.writeFileSync;
// get a list of all CSVs
var files = ls(__dirname).filter(function (file) {
return '.csv' == file.substr(-4);
});
// serial loop to prevent EMFILEs
(function next(i) {
var file = files[i];
if (!file) return done();
// conver the file
convertFile(file, function (err, json) {
var jsonfile = file.slice(0, -4) + '.json';
write(jsonfile, JSON.stringify(json, null, 2));
console.log('\n %s -> %s', file, jsonfile);
next(++i);
});
}(0));
// a heart warming success message :)
function done() {
console.log('\n GREAT FUCKING JOB!');
}
var fs = require('fs');
var read = fs.readFileSync;
var csv = require('csv');
/**
* Expose `convertFile`.
*/
module.exports = convertFile;
/**
* Convert the given CSV `file` to JSON,
* invoking `fn(err, obj)`.
*
* @api public
* @param {String} file
* @param {Function} fn
* @return {Object}
*/
function convertFile(file, fn) {
var data = read(file).toString();
csv().from.string(data).to.array(function (csv) {
var headers = toObject(csv.shift());
var obj = csv.map(function (row) {
return buildRow(headers, row);
});
fn(null, obj);
});
}
/**
* Build an Object `row` from the given `array`.
*
* @api private
* @param {Object} headers
* @param {Array} array
* @return {Object}
*/
function buildRow(headers, array) {
var row = copy(headers);
Object.keys(row).forEach(function (key, i) {
row[key] = array[i];
});
return row;
}
/**
* Create an `Object` with the keys of the given `array`'s values.
*
* @api private
* @param {Array} array
* @return {Object}
*/
function toObject(array) {
var obj = {};
for (var i = 0; i < array.length; i++) {
obj[array[i]] = null;
}
return obj;
}
/**
* Create a shallow copy of the given `obj`.
*
* @api private
* @param {Object} obj
* @return {Object}
*/
function copy(obj) {
var res = {};
for (var prop in obj) {
res[prop] = obj[prop];
}
return res;
}
{
"name": "hilton-csv",
"version": "0.0.0",
"main": "index.js",
"private": true,
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Stephen Mathieson <[email protected]>",
"license": "MIT",
"dependencies": {
"csv": "~0.3.7"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment