【问题标题】:How to create an JSON array using node-csvtojson?如何使用 node-csvtojson 创建 JSON 数组?
【发布时间】:2019-06-02 15:26:06
【问题描述】:

使用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 数组作为输出?

我知道 this issue,但我注意到 toArrayString 已从 api 中删除。

【问题讨论】:

    标签: node.js json csv node-streams


    【解决方案1】:

    在询问时,我无法使用 csvtojson api 做我想做的事情。

    如果有人感兴趣,我的最终解决方案是使用 through2-mapthrough2-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);
    

    【讨论】:

      【解决方案2】:

      只是对此的迟到回应。 在2.0.10 版本中,JSON 数组格式又回来了。

      只需将downstreamFormat 设置为json

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

      详情可见here

      【讨论】:

        猜你喜欢
        • 2019-08-15
        • 2019-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-23
        • 2018-11-15
        • 2011-02-02
        • 1970-01-01
        相关资源
        最近更新 更多