javascriptarraysjsonrequest-promisecsvtojson

Get CSV File From URL & Convert to JSON Array


I need to get data from a csv file hosted on a url and convert it to json array. Till now I'm using this.

    import request from "request-promise";
    import encode from "nodejs-base64-encode";

    let url = 'https://example.com/filename.csv';

    function conversion(url) {
        return request.get(url, {encoding: null})
        .then( function (res) {
            //var base64File = encode.encode(res, 'base64');
            //how to convert the received data to json
        });
    }

I have tried converting to base64 first and then decoding the string but it just gives me string like below.

name,value,email
jason,23,email@email.com
jeremy,45,email@email.com
nigel,23,email@email.com
jason,23,email@email.com

I need it as a json array.


Solution

  • You can include a package like csvtojson to handle this conversion for you.

    /** csv file
    a,b,c
    1,2,3
    4,5,6
    */
    const csvFilePath='<path to csv file>'
    const csv=require('csvtojson')
    csv()
    .fromFile(csvFilePath)
    .then((jsonObj)=>{
        console.log(jsonObj);
        /**
         * [
         *  {a:"1", b:"2", c:"3"},
         *  {a:"4", b:"5". c:"6"}
         * ]
         */ 
    })
    
    // Async / await usage
    const jsonArray=await csv().fromFile(csvFilePath);