Converting JSON object to CSV format in JavaScript

90,830

Solution 1

you can try as

$(document).ready(function () {

        // Create Object
        var items = [
              { name: "Item 1", color: "Green", size: "X-Large" },
              { name: "Item 2", color: "Green", size: "X-Large" },
              { name: "Item 3", color: "Green", size: "X-Large" }];

        // Convert Object to JSON
        var jsonObject = JSON.stringify(items);

        // Display JSON
        $('#json').text(jsonObject);

        // Convert JSON to CSV & Display CSV
        $('#csv').text(ConvertToCSV(jsonObject));
    });

and a function ConvertToCSV

// JSON to CSV Converter
        function ConvertToCSV(objArray) {
            var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
            var str = '';

            for (var i = 0; i < array.length; i++) {
                var line = '';
                for (var index in array[i]) {
                    if (line != '') line += ','

                    line += array[i][index];
                }

                str += line + '\r\n';
            }

            return str;
        }

Source

Solution 2

Probably more elegant and the simplest solution

function convertToCSV(arr) {
  const array = [Object.keys(arr[0])].concat(arr)

  return array.map(it => {
    return Object.values(it).toString()
  }).join('\n')
}


console.log(
  convertToCSV(
    [
      {
        id: 1,
        name: 'Foo',
        timestamp: new Date()
      },
      {
        id: 2,
        name: 'Bar',
        timestamp: new Date()
      },
      {
        id: 3,
        name: 'Baz',
        timestamp: new Date()
      }
    ]
  )
)

Solution 3

Here is my solution

function arrayToCSV(objArray) {
     const array = typeof objArray !== 'object' ? JSON.parse(objArray) : objArray;
     let str = `${Object.keys(array[0]).map(value => `"${value}"`).join(",")}` + '\r\n';

     return array.reduce((str, next) => {
         str += `${Object.values(next).map(value => `"${value}"`).join(",")}` + '\r\n';
         return str;
        }, str);
 }

Example:

let arr = [{name: "Essa", age: 25}];
console.log(arrayToCSV(arr));

Solution 4

Here's a solution similar to mightybruno's answer that handles strings containing commas. None of the other answers seem to take this in to consideration.

function objectsToCSV(arr) {
    const array = [Object.keys(arr[0])].concat(arr)
    return array.map(row => {
        return Object.values(row).map(value => {
            return typeof value === 'string' ? JSON.stringify(value) : value
        }).toString()
    }).join('\n')
}

Solution 5

Below code will convert and download JSON array to csv as a file.

 function exportJSONToCSV(objArray) {
    var arr = typeof objArray !== 'object' ? JSON.parse(objArray) : objArray;
    var str =
      `${Object.keys(arr[0])
        .map((value) => `"${value}"`)
        .join(',')}` + '\r\n';
    var csvContent = arr.reduce((st, next) => {
      st +=
        `${Object.values(next)
          .map((value) => `"${value}"`)
          .join(',')}` + '\r\n';
      return st;
    }, str);
    var element = document.createElement('a');
    element.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvContent);
    element.target = '_blank';
    element.download = 'export.csv';
    element.click();
  }
Share:
90,830
user1371896
Author by

user1371896

Updated on July 09, 2022

Comments

  • user1371896
    user1371896 almost 2 years

    I am trying to convert a JavaScript object set in to CSV format

    You can get the idea about my Javascript object, if you put it in online JSON parser https://jsonformatter.org/json-parser

    This is how I tried to work it out... but it flopped.. http://jsfiddle.net/fHQzC/11/

    I am trying to take the whole values corresponding to the value "term" and corresponding title in to CSV format

    The expected output for is like

    Time,Dec 9, 2012 
    News,Germany,election, Egypt,Revolution, Japan, Earthquake
    Person,Obama, Beckham
    Title,Pearce Snubs Beckham                                
    Time,Dec 5, Birthday
    Person, Lebron James
    News,Italy,Euro 2012 Final
    Title-Heats National Champions
                                  
    

    and is it possible to download the csv file in excel sheet the one I found in Stackoverflow was not really useful me...