我想读取一个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或我应该转换为另一种格式才能使用?
谢谢!
答案 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?
是的,它。虽然这是一个小问题,但您可能应该使用像name
,quantity
这样的键来匹配许多其他通常使用camelCase的JavaScript样式。
另外,您应该在此处阅读https://rethinkdb.com/docs/importing/
,看看您是否可以直接使用RethinkDB导入来导入CSV文件。我发现CSV导入有点限制,但可能只是尝试一下。