CSV到JSON节点js - > rethinkdb

时间:2015-10-06 22:31:34

标签: node.js csv rethinkdb

我想读取一个csv文件并转换为对象的JSON数组,以便我可以插入到rethinkdb数据库中。我在节点js工作。

一个名为csvtojson的工具将csv内容转换为json(参见下面的代码)。我试图将结果放入名为database的变量中。但是,console.log中的数据库仍为空。你知道为什么会这样吗?

//Converter Class
var Converter = require("csvtojson").Converter;
var converter = new Converter({});

//read from file
require("fs").createReadStream("test.csv").pipe(converter);

var database={};
//end_parsed will be emitted once parsing finished
converter.on("end_parsed", function (jsonArray) {
   console.log(jsonArray); //here is your result jsonarray
   database=jsonArray
});

console.log(JSON.stringify(database))

console.log中test.csv的输出是:

[{Name:'object 1',数量:-100},   {姓名:'对象2',数量:-1750}]

我的第二个问题:

这是否足以插入rethinkdb或我应该转换为另一种格式才能使用?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是因为JSON.stringify(database)在事件end_parsed被解雇之前运行。在NodeJS中,流控制与其他语言不同,这意味着从上到下,因为JavaScript异步。为转换器对象的事件end_parsed设置事件处理程序之后。您的程序继续运行,无需阻止等待处理CSV文件。那时,database仍然是空的。

只需改变它:

converter.on("end_parsed", function (jsonArray) {
   console.log(jsonArray); //here is your result jsonarray
   database=jsonArray
   console.log(JSON.stringify(database))
});

将使其正常工作,因为database已设置并在end_parsed事件的事件处理程序内调用console.log。

Is this good enough to insert in the rethinkdb or should I convert into another format for it to work?

是的,它。虽然这是一个小问题,但您可能应该使用像namequantity这样的键来匹配许多其他通常使用camelCase的JavaScript样式。

另外,您应该在此处阅读https://rethinkdb.com/docs/importing/,看看您是否可以直接使用RethinkDB导入来导入CSV文件。我发现CSV导入有点限制,但可能只是尝试一下。