2015-10-06 53 views
0

我想讀取一個csv文件並將其轉換爲JSON數組對象,以便我可以插入到rethinkdb數據庫中。我在節點js工作。將CSV轉換爲JSON節點js - > rethinkdb

稱爲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輸出是:

[{名稱: '對象1',數量:-100},{ 名稱: '對象2',數量:-1750}]

我的第二個問題:

這是不夠好,在rethinkdb插入,或者我應該轉換成另一種格式,它的工作?

謝謝!

回答

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設置和來電CONSOLE.LOG end_parsed事件的內部事件處理程序。

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導入有點有限,但可能只是試一試。

+0

嗨,謝謝你的幫助。 我需要處理和檢查之前,我可以插入rethinkdb ...例如跳過重複行 –