Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取TSV文件并在JS中转换为JSON_Javascript - Fatal编程技术网

Javascript 如何获取TSV文件并在JS中转换为JSON

Javascript 如何获取TSV文件并在JS中转换为JSON,javascript,Javascript,我有一个TSV文件,它的文件中有这个 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-15215

我有一个TSV文件,它的文件中有这个

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
2   PA-152156   11/18/20    01/19/16    Second Class    CG-120  Clay Bute   Consumer    United States   Henderson   Kentucky    42420   South   FUR-CH-10000454 Furniture   Chairs   Deluxe Fabric Upholstered Stacking Chairs, Rounded Back    731.94  3   0   219.582
这只是一个样本。有大约100行的项目。我想读取这个tsv文件并将其显示为JSON对象,格式如下:

"Customer Name": {
        "orders": [
            {
                "order_id": "CA-1234-567890",
                "order_date": "YYYY-MM-DDTHH:MM:SS",
                "line_items": [
                    {
                        "product_url": "https://www.fake.com/cat/subcat/123",
                        "business": 123.45
                    },
                    {
                        "product_url": "https://www.fake.com/cat/subcat/456",
                        "business": 67.89
                    },
                    ...
                ]
            },
            ...
        ]
    },
    "Customer Name 2": { ... },
    ...
}
其中客户名称必须是tsv文件值中的任何内容。url是使用类别、子类别和产品id字段构建的。商业价值就是销售的价值。我不知道如何在Javascript中做到这一点。这是我到目前为止得到的,但我得到的是作为输出的
[]

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; //JavaScript object
    return JSON.stringify(result); //JSON
  }
console.log(tsvJSON("./sampledata.tsv"));
函数tsvJSON(tsv){ var lines=tsv.split(“\n”); var结果=[]; var headers=行[0]。拆分(“\t”);
对于(var i=1;i,首先,问题是您没有加载文件,您只是传递了一个文件名,因为您使用
i=1
开始第一个循环,所以它不会进入其中,因为只有一行,即文件名…请尝试执行以下操作:

function tsvJSON(tsv) {
  const lines = tsv.split("\n");
  const result = [];
  const headers = lines[0].split("\t");

  for (let i = 1; i < lines.length; i++) {
    const obj = {};
    const currentline = lines[i].split("\t");

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

    result.push(obj);
  }

  return result;
}

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

console.log(JSON.stringify(jsonRes));
函数tsvJSON(tsv){ 常量行=tsv.split(“\n”); 常量结果=[]; 常量头=行[0]。拆分(“\t”); for(设i=1;i 这应该对你有用,正如你所看到的,我首先读取了文件,然后将其传递给你的函数…很抱歉,我不得不将var改为const,并让…我的个人bug出现在head:)

const tsv2arr=(tsv)=>{
const[headers,…rows]=tsv.trim().split('\n').map(r=>r.split('\t'))
返回行。减少((a,r)=>[
A.
Object.assign(…(r.map(
(x,i,c=x.trim())=>({[headers[i].trim()]:isNaN(c)?c:Number(c)})
)))
], [])
}
常数tsv=`
行ID O ID O日期发货日期发货类型客户ID客户名称Seg国家/地区城市/州邮政编码地区产品ID类别子类别产品名称销售数量折扣利润
1 PA-152156 11/9/20 01/19/16二等CG-125粘土布特消费品美国亨德森肯塔基42420 South FUR-BO-10001798家具书架布什,萨默塞特收藏书架?261.96 2 0 41.9136
2 ST-621973 8/9/20 02/10/16一等XY-139 Foobar Inc消费品美国威斯康星州麦迪逊53702中西部毛皮-SO-10003869家具沙发泰勒,一些随机沙发名称963.85 1 0 265.89
3 MQ-169437 12/7/20 03/15/16二等CG-125粘土布特消费品美国亨德森肯塔基州42420 South FUR-DE-10005309家具桌亚当斯,一些随机桌名?654.13 1 0 143.28
`
控制台日志(
tsv2arr(tsv)

)
你能更好地格式化你粘贴的TSV以便我们阅读吗?你应该能够更好地使用你用于JSONDoes的代码格式,看起来更好?更好。我认为@odinn有下面的答案。您好@odinn,你如何以所需的格式输出json?比如,不要让json对象成为subcategory和category、 而是输出产品url,即“someurl/子类别+类别”?我曾想过使用maps或一些if/else语句,但我以前从未这样做过。阅读JS中的map或reduce有很多例子说明如何使用map或reduce,没有神奇的方法来完成您需要做的事情,您需要检查数据,创建一个具有所需格式的新对象并不断添加到其中。还建议阅读n对象在JS中如何工作以及如何操作它们。如果这是家庭作业,我想你不必担心它的性能