CSV в узел JSON js - ›rethinkdb

Я хотел бы прочитать файл csv и преобразовать его в массив объектов JSON, чтобы я мог вставить его в базу данных rethinkdb. Я работаю в node 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))

Мой вывод из test.csv в console.log:

[{Имя: 'объект 1', Количество: -100}, {Имя: 'объект 2', Количество: -1750}]

Мой второй вопрос:

Достаточно ли этого для вставки в rethinkdb или мне нужно преобразовать в другой формат, чтобы он работал?

Спасибо!!


person Big Skinny    schedule 06.10.2015    source источник


Ответы (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?

Да это. Хотя это и несущественный момент, вероятно, вам следует использовать такие ключи, как name, quantity, чтобы соответствовать многим другим стилям JavaScript, обычно это camelCase.

Кроме того, вы должны прочитать здесь https://rethinkdb.com/docs/importing/, чтобы узнать, можно ли использовать импорт RethinkDB для прямого импорта файла CSV. Я обнаружил, что импорт CSV немного ограничен, но, вероятно, просто попробуйте.

person kureikain    schedule 06.10.2015
comment
Привет, спасибо за помощь. Мне нужно обработать и проверить, прежде чем я смогу вставить в rethinkdb ... например, пропустить повторяющуюся строку - person Big Skinny; 07.10.2015