【问题标题】:Converting TSV file to JSON using text2json return no value使用 text2json 将 TSV 文件转换为 JSON 不返回值
【发布时间】:2017-08-20 12:05:55
【问题描述】:

我正在尝试将 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() 什么也没返回,所以我的测试失败了,我错过了什么吗?

【问题讨论】:

    标签: json node.js csv testing ava


    【解决方案1】:

    在您的方法中,您通过从流中异步读取来填充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)
        });
    

    【讨论】:

    • end 事件在我的情况下似乎没有被触发。我更新了问题以提供更多上下文
    • 是的,我看到你提交了一个问题。但是,即使您尝试了回调方法,您也不会得到同步响应。 (当然,您必须使用回调)。现在,关于“结束”事件没有发生,您可以再次尝试回调方法,或者可能监听error 事件,因为the only exit point 在读取文件后必须回调或发出结束。
    猜你喜欢
    • 1970-01-01
    • 2021-05-13
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2012-01-07
    • 2020-07-16
    • 2014-07-08
    相关资源
    最近更新 更多