【问题标题】:How to map data from tsv file?如何从 tsv 文件映射数据?
【发布时间】:2020-04-22 22:55:22
【问题描述】:

我有将 tsv 文件转换为 json 的功能,但是我想在 json 输出中创建键值对。 tsvJSON 函数返回 json 但我想以某种结构格式化。

tsv.file

Row ID  O ID    O Date  Ship Date   Ship Type   Customer ID Customer Name   Seg Country City    State   Zip Code    Region  Product ID  Category    Sub-Category    Product Name    Sales   Quantity    Discount    Profit
1   PA-152156   11/9/20 01/19/16    Second Class    CG-125  Clay bute   Consumer    United States   Henderson   Kentucky    42420   South   FUR-BO-10001798 Furniture   Bookcases   Bush, Somerset Collection Bookcase? 261.96  2   0   41.9136

main.js

  const tsvFileData = fs.readFileSync('./filename1.tsv');
    const jsonRes = tsvJSON(tsvFileData.toString());
    const fs = require('fs');
    function tsvJSON(tsv){

      var lines=tsv.split("\n");

      var result = [];

      var headers=lines[0].split("\t");

      for(var i=1;i<lines.length;i++){

          var obj = {};
          var currentline=lines[i].split("\t");

          for(var j=0;j<headers.length;j++){
              obj[headers[j]] = currentline[j];
          }

          result.push(obj);

      }

      return result; //JSON
    }

返回这个

[
    {
        "Row ID  O ID    O Date  Ship Date   Ship Type   Customer ID Customer Name   Seg Country City    State   Zip Code    Region  Product ID  Category    Sub-Category    Product Name    Sales   Quantity    Discount    Profit": "1   PA-152156   11/9/20 01/19/16    Second Class    CG-125  Clay bute   Consumer    United States   Henderson   Kentucky    42420   South   FUR-BO-10001798 Furniture   Bookcases   Bush, Somerset Collection Bookcase? 261.96  2   0   41.9136"
    }]

预期输出

[{
    "Row ID": 1,  "O ID":"PA-152156","O Date":"11/9/20"  , "Ship Date": "01/19/16", and rest of the fields mapping 
}]

【问题讨论】:

  • pattern "\t" 不适用于您的 tsv 文件。见这里regextester.com/?fam=115953
  • @Supercool 什么是正确的方法来实现这个可以分享一个例子?
  • 我尝试了 split(/\s\s/) 它正在做一些接近预期结果的事情

标签: javascript arrays json csv


【解决方案1】:

它不起作用,因为您的 tsv 文件格式不正确,因此标题总数未按预期返回...

假设这个文件用“分号”分隔,下面的例子就可以了……

文件名1.tsv

ID;NAME;PHONE_NUMBER
1;WILLIAN;(11)98550-3485

main.js

const fs = require('fs');

const splitBy = ';'

function tsvJSON(tsv){

    var lines=tsv.split("\n");

    var result = [];

    var headers=lines[0].split(splitBy);

    for(var i=1;i<lines.length;i++){

        var obj = {};
        var currentline=lines[i].split(splitBy);

        for(var j=0;j<headers.length;j++){
            obj[headers[j]] = currentline[j];
        }

        result.push(obj);

    }

    return result; //JSON
}

const tsvFileData = fs.readFileSync('./filename1.tsv');
const jsonRes = tsvJSON(tsvFileData.toString());
console.log(jsonRes)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多