63 lines
1.4 KiB
JavaScript
63 lines
1.4 KiB
JavaScript
import fs from 'node:fs';
|
|
import color from 'chalk';
|
|
|
|
const data = fs.readFileSync('data/products.csv', 'utf-8');
|
|
|
|
const toCamelCase = (str) => {
|
|
return str
|
|
.trim()
|
|
.toLowerCase()
|
|
.replace(/[^a-zA-Z0-9]+(.)/g, (match, chr) => chr.toUpperCase());
|
|
};
|
|
|
|
const convertCsvToJson = (products, ar) => {
|
|
const resultAr = products.map((str) => {
|
|
const fields = str.split(/\s*,\s*/);
|
|
|
|
const labels = ar.map((label, idx) => {
|
|
return [label, isNaN(fields[idx]) ? fields[idx] : Number(fields[idx])];
|
|
});
|
|
|
|
const obj = Object.fromEntries(labels);
|
|
|
|
// console.log(labels); // Entries Array
|
|
//console.log(obj);
|
|
|
|
return obj;
|
|
|
|
// return {
|
|
// [ar[0]]: fields[0],
|
|
// [ar[1]]: fields[1],
|
|
// [ar[2]]: fields[2],
|
|
// [ar[3]]: Number(fields[3]),
|
|
// [ar[4]]: Number(fields[4]),
|
|
// };
|
|
});
|
|
// console.log(resultAr);
|
|
|
|
const jsonStr = JSON.stringify(resultAr, '', 2);
|
|
|
|
fs.writeFile('products.json', jsonStr, 'utf-8', (err) => {
|
|
if (err) {
|
|
console.log(err);
|
|
} else {
|
|
console.log(color.green('file created!'));
|
|
}
|
|
});
|
|
};
|
|
|
|
const productAr = data
|
|
.split('\n')
|
|
.map((row) => row.replace('\n', ''))
|
|
.filter((row) => row !== '');
|
|
|
|
const headerAr = productAr
|
|
.shift()
|
|
.split(/\s*,\s*/)
|
|
.map(toCamelCase);
|
|
|
|
// console.log('=======');
|
|
// console.log(productAr);
|
|
|
|
convertCsvToJson(productAr, headerAr);
|