Javascript 如何获取TSV文件并在JS中转换为JSON
我有一个TSV文件,它的文件中有这个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
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;iconst 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中如何工作以及如何操作它们。如果这是家庭作业,我想你不必担心它的性能