Created
July 23, 2020 18:05
-
-
Save scolton99/5d8916f27cb9ed9ab328ae2c22618a45 to your computer and use it in GitHub Desktop.
CSV Parser for AWS DynamoDB
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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