Skip to content

Instantly share code, notes, and snippets.

@scolton99
Created July 23, 2020 18:05
Show Gist options
  • Select an option

  • Save scolton99/5d8916f27cb9ed9ab328ae2c22618a45 to your computer and use it in GitHub Desktop.

Select an option

Save scolton99/5d8916f27cb9ed9ab328ae2c22618a45 to your computer and use it in GitHub Desktop.
CSV Parser for AWS DynamoDB
const csv = require('csvtojson');
const fs = require('fs');
const files = [];
const colParserBool = item => {
return item === "true";
};
const colParserStringSet = item => {
let trimmed = item.trim();
trimmed = trimmed.replace(/^{ \"/, "");
trimmed = trimmed.replace(/\" }$/, "");
const arr = trimmed.split("\", \"").map(x => x.trim());
return arr;
};
const type_match = {
"N": "number",
"S": "string",
"BOOL": colParserBool,
"SS": colParserStringSet
}
const get_clean_header = header => (header.replace(/\s\([A-Z]+\)$/, ""));
const filename_to_json = filename => (filename.replace(/.csv$/, ".json"));
const run = async () => {
for (const file of files) {
const header_type_matches = {};
const csv_parser_header = csv();
csv_parser_header.on('header', header => {
for (let i = 0; i < header.length; ++i) {
const header_col = header[i];
const [_, type] = /\s\(([A-Z]+)\)$/.exec(header_col);
const name_clean = get_clean_header(header_col);
header[i] = name_clean;
header_type_matches[name_clean] = type_match[type];
}
});
await csv_parser_header.fromFile(file);
const csv_parser = csv({
colParser: header_type_matches
}).on('header', header => {
header = header.map((x, i) => {
header[i] = get_clean_header(x)
});
});
const obj = await csv_parser.fromFile(file);
fs.writeFileSync(filename_to_json(file), JSON.stringify(obj, null, 2));
}
}
run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment