Как создать массив JSON с помощью node-csvtojson? - PullRequest
0 голосов
/ 08 января 2019

При использовании node-csvtojson как вывести данные в виде массива json?

const request = require("request");
const csv = require("csvtojson");
const fs = require("fs");

const readStream = request.get("http://www.example.com/some.csv");
const writeStream = fs.createWriteStream("./some.json");
const converter = csv({
  includeColumns: /Column3|Column2/
});

readStream.pipe(converter).pipe(writeStream);

Предполагая следующую структуру данных:

Column1,Column2,Column3
1,2,3
one,two,three

Я ожидаю, что выходной файл будет содержать:

[
  { "Column2": "2", "Column3": "3" },
  { "Column2": "two", "Column3": "three" }
]

На самом деле я получаю следующее:

{ "Column2": "2", "Column3": "3" }
{ "Column2": "two", "Column3": "three" }

Как мне получить массив JSON в качестве вывода?

Мне известно о этой проблеме , но я заметил, что toArrayString был удален из API.

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Во время запроса я не могу делать то, что я хочу, с csvtojson api.

В случае, если кто-то заинтересован, мое окончательное решение было использовать through2-map и through2-reduce для создания массива.

...

const map = require("through2-map");
const reduce = require("through2-reduce");

...

readStream
  .pipe(converter)
  .pipe(reduce((previous, current) => {
    return previous ? `${previous},${current}` : current;
  })
  .pipe(map(chunk => `[${chunk}]`))
  .pipe(writeStream);
0 голосов
/ 27 июня 2019

Просто поздний ответ на это. В версии 2.0.10 формат массива JSON вернулся.

Просто установите downstreamFormat на json

csv({downstreamFormat:"json"}).fromFile(fileName).pipe(fileWritableStream);

Подробности можно найти здесь

0 голосов
/ 08 января 2019

Вывод, который вы получаете, не является действительным CSV. В любом случае, вот небольшая функция, которую вы можете запустить в узле, чтобы преобразовать ваш вывод в массив.

const arrayConvert = filePath => {
  const fs = require("fs");
  const fileString = fs.readFileSync(filePath).toString();
  return JSON.parse("[" + fileString.replace(/\n/g, ",") + "]");
};

console.log(arrayConvert("./data.csv")[0].Column2);

Вы можете сохранить его с помощью JSON.stringify (). Надеюсь, это поможет.

...