使用键作为标题和值将对象集合转换为csv

时间:2018-05-09 15:31:14

标签: javascript csv

我有一个像这样的对象myObject

 0:
    timestamp: 1525879470
    name: "testing"
    lastname: "testingdone"
 1: 
    timestamp: 1525879470
    name: "testing2"
    lastname: "testingdone2"

我正在寻找一种将它转换为csv的方法,就像这样

timestamp,name,lastname
1525879470,testing,testingdone
1525879470,testing2,testingdone2

好消息是我可以提取标题

var headers = Object.keys(myObject.reduce(function (result, obj) {
                            return Object.assign(result, obj);
                        }, {}));

header var会给我一个像

这样的标题数组

Array(3): timestamp, name, lastname

我只是想从像对象的数组中提取对象的值,然后最终将其转换为CSV,如上所述。我尝试使用数组映射但由于某种原因我无法弄清楚

3 个答案:

答案 0 :(得分:4)

如果那是对象数组,你可以先获取标题,然后输入值并从中创建字符串。



const data = [ {timestamp: 1525879470,name: "testing",lastname: "testingdone"
}, {timestamp: 1525879470,name: "testing2",lastname: "testingdone2"}]

let csv = '';
let header = Object.keys(data[0]).join(',');
let values = data.map(o => Object.values(o).join(',')).join('\n');

csv += header + '\n' + values;
console.log(csv)




答案 1 :(得分:0)

如果那个东西(myObject)是一个JavaScript对象,你可以使用解构在数组块中序列化它,然后使用Array#reduce将它们连接成一个字符串:



const data = {
  '0': {
    timestamp: 1525879470,
    name: "testing",
    lastname: "testingdone"
  },
  '1': {
    timestamp: 1525879470,
    name: "testing2",
    lastname: "testingdone2"
  }
};

const result = [
    // headers
    Object.keys(data['0']),
    // values
    ...Object.values(data).map(item => Object.values(item))
  ]
  .reduce((string, item) => {
    string += item.join(',') + '\n';
    return string;
  }, '');

console.log(result);




答案 2 :(得分:0)

在为CSV编写自己的代码时要小心,存在很多边缘情况,而不仅仅是将项目与逗号和换行符组合在一起(如果数据中包含逗号,该如何插入BOM来确保非ASCII输入的文本是否可以在任何电子表格软件中正确显示?)。

以下是一些有效的示例代码:

const ObjectsToCsv = require('objects-to-csv');

// Sample data - two columns, three rows:
const data = [
  {code: 'HK', name: 'Hong Kong'},
  {code: 'KLN', name: 'Kowloon'},
  {code: 'NT', name: 'New Territories'},
];

// If you use "await", code must be inside an asynchronous function:
(async () => {
  const csv = new ObjectsToCsv(data);

  // Save to file:
  await csv.toDisk('./test.csv');

  // Return the CSV file as string:
  console.log(await csv.toString());
})();