3

我正在尝试将换行符分隔的 JSON 文件转换为 CSV(这是一项愚蠢的任务,但没关系),我很好奇如何在node.js中轻松做到这一点。到目前为止,我所拥有的是,

var csv = require('csv'), 
    fs = require('fs'),
    JSONStream = require('JSONStream');

var stream = fs.createReadStream('input.json', {encoding: 'utf8'})
    .pipe(JSONStream.parse());
csv().from(stream).to('out.csv');

这可行,但不能让我表达对键的排序。例如,如果我有这样的输入文件,

{"foo": 1, "bar": 2}
{"bar": 3, "foo": -1}

我想添加一个变压器功能,

function(line_object) { return [line_object.foo, line_object.bar]; };

这样我的输出将是 lines1, 2-1, 3,对应于foo第 1 列和bar第 2 列,而不是当前行为1, 2and 3, -1

但是,所有在线示例对于添加转换器似乎都相当冗长。他们似乎创建了require('stream').Transform对象,然后_transform在这些对象上设置了函数。问题:有没有更清洁/更简洁的方法来做到这一点?非常感谢,请原谅我的无知,因为这几乎是node.js我编写的第一个代码。

4

1 回答 1

3

event-stream可能有用:

var fs         = require('fs');
var csv        = require('csv');
var JSONStream = require('JSONStream');
var es         = require('event-stream');

es.pipeline(
  fs.createReadStream('input.json'),
  JSONStream.parse(),
  es.map(function(data, next) {
    next(null, [ data.foo, data.bar ]);
  }),
  csv().to('out.csv')
);
于 2013-10-12T08:30:47.057 回答