Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Node packages for file system
- var fs = require('fs');
- var path = require('path')
- var booksCSV = path.join(__dirname, 'books.csv');
- var booksJSON = path.join(__dirname, 'books.json');
- var delim = ';';
- // Read CSV
- var f = fs.readFileSync(booksCSV, { encoding: 'utf-8' },
- function (err) { console.log(err); });
- // Split on row
- f = f.split("\n");
- // Get first row for column headers
- var headers = f.shift().split(delim).map(s => s = s.trim());
- var tmpArr = []; //temporary array
- var rowCouner = 1;
- f.forEach(function (dat) {
- // Loop through each row
- let tmp = {};
- let row = dat.split(delim);
- if (row.length === headers.length) { //skip rows with wrong number of columns
- for (var i = 0; i < headers.length; i++) {
- tmp[headers[i]] = row[i].trim();
- }
- // Add object to list
- tmpArr.push(tmp);
- } else {
- console.log('Row #' + rowCouner + ' skipped because of error.');
- };
- rowCouner++;
- });
- let tmpjson = [];
- while (tmpArr.length !== 0) { //grouping elems by author
- let authorDecription = { //object for elements on "authors" array
- author: '',
- books: []
- };
- let book = { //object for books description
- title: '',
- description: ''
- };
- let elem = tmpArr.shift();
- book.title = elem['Title'];
- book.description = elem['Annotation'];
- let ind = tmpjson.findIndex((item) => {
- return item.author === elem['Author'];
- });
- if ((ind !== -1)> 0) {
- tmpjson[ind].books.push(book);
- } else {
- authorDecription.author = elem['Author'];
- authorDecription.books.push(book);
- tmpjson.push(authorDecription);
- };
- };
- let json = {}
- json.authors = tmpjson;
- // Convert object to string, write json to file
- fs.writeFileSync(booksJSON, JSON.stringify(json, ' '),
- function (err) { console.log(err); });
Add Comment
Please, Sign In to add comment