在javascript中将json对象转换为csv格式

use*_*896 29 javascript csv arrays json

我试图将javascript对象集转换为csv格式

如果你把它放在在线JSON解析器http://json.parser.online.fr/你可以得到我的Javascript对象的想法

这就是我试图解决的问题......但它失败了...... http://jsfiddle.net/fHQzC/11/

我试图将对应于值"term"和相应标题的整个值取为csv格式

预期的输出就像

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
Run Code Online (Sandbox Code Playgroud)

Title-Heats全国冠军

是否可以在excel表中下载csv文件,我在堆栈中找到的那个文件真的很有用......

Hem*_*lia 23

你可以尝试

$(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));
    });
Run Code Online (Sandbox Code Playgroud)

和一个函数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;
        }
Run Code Online (Sandbox Code Playgroud)

资源

  • 复杂度不会对此造成影响,因为csv的格式将始终保持不变。 (2认同)
  • 你检查过 http://stackoverflow.com/questions/4130849/convert-json-format-to-csv-format-for-ms-excel 吗? (2认同)

mig*_*uno 20

可能更优雅和最简单的解决方案

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()
      }
    ]
  )
)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这正是我需要的解决方案。我相信这是最好的答案。 (2认同)
  • 不幸的是,如果对象排序和填充不正确,这将不起作用,因为它假设第一个对象包含所有字段并且它们的顺序将保持不变。 (2认同)

Ees*_*esa 14

这是我的解决方案

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);
 }
Run Code Online (Sandbox Code Playgroud)

例:

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


Anu*_*ale 10

下面的代码将 JSON 数组转换并下载为 csv 文件。

 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();
  }
Run Code Online (Sandbox Code Playgroud)


小智 8

这是一个类似于mightybruno's answer的解决方案,它处理包含逗号的字符串。其他答案似乎都没有考虑到这一点。

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')
}
Run Code Online (Sandbox Code Playgroud)