使用text2json将TSV文件转换为JSON不返回任何值

时间:2017-03-27 16:53:35

标签: json node.js csv testing ava

我尝试将TSV文件转换为JSON并使用text2json将其写入磁盘。

输入数据

末尾有一个空行

U+2B695 shī
U+2B699 pū
U+2B6DB zhī
U+2B6DE jué
U+2B6E2 níng
U+2B6F6 chì
U+2B6F8 tí

测试

我使用ava

运行此测试
import fs from "fs";
import test from "ava";
import jsonfile from "jsonfile";
import dataminer from "../src/dataminer";

test("extractPronunciation()", t => {
  const filepath = "src/codepoint-ruby.tsv";

  const data = dataminer.convertToJson(filepath, { separator: " " });

  t.is(data > 0);
});

代码

此方法基于text2json

import jsonfile from "jsonfile";
import text2json from "text2json";

export default {
  convertToJson: (filepath, options) => {
    const data = [];
    const parse = new text2json.Parser({ ...options, hasHeader: true });

    parse
      .text2json(filepath)
      .on("row", row => {
        data.push(row);
      })
      .on("end", () => {
        console.log("Done >>>>>");
        return data;
      });
  },
};

问题

我看不到被触发的end事件的痕迹,convertToJson()没有返回,所以我的测试失败,我错过了什么?

1 个答案:

答案 0 :(得分:2)

在您的方法中,您通过从流异步读取来填充data数组,而不是将整个文件放在内存中并同步执行。 (这就是为什么你必须使用on事件将数据推送到你的数组的原因。)

这意味着,就像使用

一样
parse.text2json(filepath).on("row", row => {
      data.push(row);
});

您还需要使用end事件来记录最终结果

parse.text2json(filepath)
    .on("row", row => {
        data.push(row);
    })
    .on('end', () => {
        console.log(data)
    });