Daniel Raviv
Daniel Raviv

Reputation: 31

converting csv into json not working as planned in node.js

hi i have this csv file and i want to make it json so i can access data easily in node.js i use the csv-parser module and insted of returning an json/object like file it just returns a big string

'CountryName,CapitalName,CapitalLatitude,CapitalLongitude,CountryCode,ContinentName\n' + 'Somaliland,Hargeisa,9.55,44.050000,NULL,Africa\n' + 'South Georgia and South Sandwich Islands,King Edward Point,-54.283333,-36.500000,GS,Antarctica\n' + 'French Southern and Antarctic Lands,Port-aux-Français,-49.35,70.216667,TF,Antarctica\n' + 'Palestine,Jerusalem,31.766666666666666,35.233333,PS,Asia\n' + 'Aland Islands,Mariehamn,60.116667,19.900000,AX,Europe\n' +

this is example of what it returns (the first row is the headers)

this is the code

const fs = require('fs');
const csv = require('csv-parser');

const dataResults = [];
const fileHeaders = [
    'CountryName',
    'CapitalName',
    'CapitalLatitude',
    'CapitalLongitude',
    'CountryCode',
    'ContinentName'
]

// reads the file 
var readFile = fs.createReadStream(__dirname + '/country-capitals.csv','utf-8');

readFile.pipe(csv({separator: '\n', headers:fileHeaders}))
// event handler that handels the data
readFile.on('data', (data)=>dataResults.push(data))

readFile.on('end',()=>{
    console.log(dataResults);
})
const fs = require('fs');
const csv = require('csv-parser');

const dataResults = [];
const fileHeaders = [
    'CountryName',
    'CapitalName',
    'CapitalLatitude',
    'CapitalLongitude',
    'CountryCode',
    'ContinentName'
]

// reads the file 
var readFile = fs.createReadStream(__dirname + '/country-capitals.csv','utf-8');

readFile.pipe(csv({separator: '\n', headers:fileHeaders}))
// event handler that handels the data
readFile.on('data', (data)=>dataResults.push(data))

readFile.on('end',()=>{
    console.log(dataResults);
})

Upvotes: 1

Views: 62

Answers (2)

Evan
Evan

Reputation: 33

That works for me.

const csv = require('csv-parser')
const fs = require('fs')
const data = 'CountryName,CapitalName,CapitalLatitude,CapitalLongitude,CountryCode,ContinentName\n' + 'Somaliland,Hargeisa,9.55,44.050000,NULL,Africa\n' + 'South Georgia and South Sandwich Islands,King Edward Point,-54.283333,-36.500000,GS,Antarctica\n'
const results = [];

fs.createReadStream(data)
  .pipe(csv())
  .on('data', (data) => results.push(data))
  .on('end', () => {
    console.log(results);

  });

Upvotes: 0

Jessica Felix
Jessica Felix

Reputation: 1

You can use just a simple parse, if I understand what you want to do:

CODE:

const csv = require('csv-parser')
const fs = require('fs')

const results = [];
const data = (__dirname + '/country-capitals.csv')

fs.createReadStream(data)
  .pipe(csv())
  .on('data', (data) => results.push(data))
  .on('end', () => {
    console.log(results);
  });

RESULT:

[
  {
    CountryName: 'Somaliland',
    CapitalName: 'Hargeisa',
    CapitalLatitude: '9.55',
    CapitalLongitude: '44.050000',
    CountryCode: 'NULL',
    ContinentName: 'Africa'
  },
  {
    CountryName: 'South Georgia and South Sandwich Islands',
    CapitalName: 'King Edward Point',
    CapitalLatitude: '-54.283333',
    CapitalLongitude: '-36.500000',
    CountryCode: 'GS',
    ContinentName: 'Antarctica'
  },
  {
    CountryName: 'French Southern and Antarctic Lands',
    CapitalName: 'Port-aux-Français',
    CapitalLatitude: '-49.35',
    CapitalLongitude: '70.216667',
    CountryCode: 'TF',
    ContinentName: 'Antarctica'
  },
  {
    CountryName: 'Palestine',
    CapitalName: 'Jerusalem',
    CapitalLatitude: '31.766666666666666',
    CapitalLongitude: '35.233333',
    CountryCode: 'PS',
    ContinentName: 'Asia'
  },
  {
    CountryName: 'Aland Islands',
    CapitalName: 'Mariehamn',
    CapitalLatitude: '60.116667',
    CapitalLongitude: '19.900000',
    CountryCode: 'AX',
    ContinentName: 'Europe'
  }
]

source: csv-parse doc

But, if you want to change the property name, like replace 'CountryName' key to 'Name', take a look at How to rename JSON key

Upvotes: 0

Related Questions