CSV 到 JSON 节点 js --> rethinkdb

CSV into JSON node js --> rethinkdb

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

一个名为 csvtojson 的工具将 csv 内容转换为 json(请参阅下面的代码)。我试图将结果放入名为数据库的变量中。然而,数据库在 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 的输出是:

[ { 名称:'object 1',数量:-100 }, { 名称:'object 2',数量:-1750 } ]

我的第二个问题:

这是否足以插入到 rethinkdb 中,还是我应该转换成另一种格式才能工作?

谢谢!!

这是因为 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 这样的键来匹配许多其他 JavaScript 样式,通常是驼峰式。

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