






















National Highway Traffic Safety Administration / 美国国家公路交通安全管理局
Fatality Analysis Reporting System / 死亡事故分析报告系统
https://www.nhtsa.gov/research-data/fatality-analysis-reporting-system-fars
原始数据 dowload
https://www.nhtsa.gov/file-downloads?p=nhtsa/downloads/FARS/2024/National/

// bug version 💩, 输出的 json 文件格式有误,没有外层 {} 包裹, 每一行都是一个 json object
const fs = require('fs');
const readline = require('readline');
const inputFile = 'person.csv';
const outputFile = 'person.json';
const readStream = fs.createReadStream(inputFile);
const writeStream = fs.createWriteStream(outputFile, { flags: 'w' });
const rl = readline.createInterface({
input: readStream,
crlfDelay: Infinity
});
let headers = [];
let isFirstLine = true;
rl.on('line', (line) => {
if (isFirstLine) {
headers = line.split(',');
isFirstLine = false;
} else {
const values = line.split(',');
const obj = {};
headers.forEach((header, idx) => {
obj[header] = values[idx];
});
writeStream.write(JSON.stringify(obj) + '\n');
}
});
rl.on('close', () => {
writeStream.end();
console.log('CSV to JSON conversion complete.');
});
STATE,STATENAME,ST_CASE,VEH_NO,PER_NO,VE_FORMS,COUNTY,MONTH,MONTHNAME,DAY,DAYNAME,HOUR,HOURNAME,MINUTE,MINUTENAME,HARM_EV,HARM_EVNAME,MAN_COLL,MAN_COLLNAME,SCH_BUS,SCH_BUSNAME,RUR_URB,RUR_URBNAME,FUNC_SYS,FUNC_SYSNAME,MOD_YEAR,MOD_YEARNAME,VPICMAKE,VPICMAKENAME,VPICMODEL,VPICMODELNAME,VPICBODYCLASS,VPICBODYCLASSNAME,MAKE,MAKENAME,BODY_TYP,BODY_TYPNAME,ICFINALBODY,ICFINALBODYNAME,GVWR_FROM,GVWR_FROMNAME,GVWR_TO,GVWR_TONAME,TOW_VEH,TOW_VEHNAME,SPEC_USE,SPEC_USENAME,EMER_USE,EMER_USENAME,ROLLOVER,ROLLOVERNAME,IMPACT1,IMPACT1NAME,FIRE_EXP,FIRE_EXPNAME,MAK_MOD,MAK_MODNAME,AGE,AGENAME,SEX,SEXNAME,PER_TYP,PER_TYPNAME,INJ_SEV,INJ_SEVNAME,SEAT_POS,SEAT_POSNAME,REST_USE,REST_USENAME,REST_MIS,REST_MISNAME,HELM_USE,HELM_USENAME,HELM_MIS,HELM_MISNAME,AIR_BAG,AIR_BAGNAME,EJECTION,EJECTIONNAME,EJ_PATH,EJ_PATHNAME,EXTRICAT,EXTRICATNAME,DRINKING,DRINKINGNAME,ALC_STATUS,ALC_STATUSNAME,ATST_TYP,ATST_TYPNAME,ALC_RES,ALC_RESNAME,DRUGS,DRUGSNAME,DSTATUS,DSTATUSNAME,HOSPITAL,HOSPITALNAME,DOA,DOANAME,DEATH_MO,DEATH_MONAME,DEATH_DA,DEATH_DANAME,DEATH_YR,DEATH_YRNAME,DEATH_TM,DEATH_TMNAME,DEATH_HR,DEATH_HRNAME,DEATH_MN,DEATH_MNNAME,LAG_HRS,LAG_HRSNAME,LAG_MINS,LAG_MINSNAME,STR_VEH,DEVTYPE,DEVTYPENAME,DEVMOTOR,DEVMOTORNAME,LOCATION,LOCATIONNAME,WORK_INJ,WORK_INJNAME,HISPANIC,HISPANICNAME
1,Alabama,10001,1,1,1,125,1,January,1,1,10,10:00am-10:59am,30,30,42,Tree (Standing Only),0,The First Harmful Event was Not a Collision with a Motor Vehicle in Transport,0,No,1,Rural,4,Minor Arterial,2009,2009,536,Pontiac,4263,G6,13,Sedan/Saloon,22,Pontiac,4,"4-door sedan, hardtop",0,Not Applicable,11,"Class 1: 6,000 lbs. or less (2,722 kg or less)",11,"Class 1: 6,000 lbs. or less (2,722 kg or less)",0,No Trailers,0,No Special Use Noted,0,Not Applicable,3,Rollover,12,12 Clock Point,0,No or Not Reported,22022,Pontiac G6,50,50 Years,1,Male,1,Driver of a Motor Vehicle In-Transport,4,Fatal Injury (K),11,"Front Seat, Left Side",3,Shoulder and Lap Belt Used,0,No Indication of Misuse,20,Not Applicable,7,None Used/Not Applicable,1,Deployed- Front,0,Not Ejected,0,Ejection Path Not Applicable,9,Unknown,1,Yes (Alcohol Involved),2,Test Given,1,Blood,330,0.330 % BAC,1,Yes (drugs involved),2,Test Given,0,Not Transported for Treatment,7,Died at Scene,1,January,1,1,2024,2024,1030,1030,10,10:00-10:59,30,30,0,0,0,0,0,96,Occupant of a Motor Vehicle,8,Occupant of a Motor Vehicle,0,Occupant of a Motor Vehicle,0,No,7,Non-Hispanic
1,Alabama,10002,1,1,1,73,1,January,2,2,7,7:00am-7:59am,40,40,59,Traffic Sign Support,0,The First Harmful Event was Not a Collision with a Motor Vehicle in Transport,0,No,2,Urban,3,Other Principal Arterial,2009,2009,482,Volkswagen,3137,Jetta,13,Sedan/Saloon,30,Volkswagen,4,"4-door sedan, hardtop",0,Not Applicable,11,"Class 1: 6,000 lbs. or less (2,722 kg or less)",11,"Class 1: 6,000 lbs. or less (2,722 kg or less)",0,No Trailers,0,No Special Use Noted,0,Not Applicable,0,No Rollover,12,12 Clock Point,0,No or Not Reported,30040,Volkswagen Jetta/Jetta SportsWagen,42,42 Years,1,Male,1,Driver of a Motor Vehicle In-Transport,4,Fatal Injury (K),11,"Front Seat, Left Side",20,None Used/Not Applicable,7,None Used/Not Applicable,20,Not Applicable,7,None Used/Not Applicable,1,Deployed- Front,0,Not Ejected,0,Ejection Path Not Applicable,0,Not Extricated or Not Applicable,0,No (Alcohol Not Involved),0,Test Not Given,0,Test Not Given,996,Test Not Given,0,No (drugs not involved),0,Test Not Given,0,Not Transported for Treatment,7,Died at Scene,1,January,2,2,2024,2024,740,740,7,7:00-7:59,40,40,0,0,0,0,0,96,Occupant of a Motor Vehicle,8,Occupant of a Motor Vehicle,0,Occupant of a Motor Vehicle,0,No,7,Non-Hispanic
1,Alabama,10003,0,1,1,3,1,January,2,2,6,6:00am-6:59am,20,20,8,Pedestrian,0,The First Harmful Event was Not a Collision with a Motor Vehicle in Transport,0,No,2,Urban,4,Minor Arterial,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,47,47 Years,2,Female,5,Pedestrian,4,Fatal Injury (K),0,Not a Motor Vehicle Occupant,96,Not a Motor Vehicle Occupant,8,Not a Motor Vehicle Occupant,96,Not a Motor Vehicle Occupant,8,Not a Motor Vehicle Occupant,97,Not a Motor Vehicle Occupant,8,Not Applicable,0,Ejection Path Not Applicable,0,Not Extricated or Not Applicable,9,Reported as Unknown,2,Test Given,1,Blood,0,0.000 % BAC,9,Reported as Unknown,2,Test Given,0,Not Transported for Treatment,7,Died at Scene,1,January,2,2,2024,2024,620,620,6,6:00-6:59,20,20,0,0,0,0,1,0,Not Applicable,0,Not Applicable,11,"Not at Intersection - On Roadway, Not in Marked Crosswalk",0,No,7,Non-Hispanic
1,Alabama,10003,1,1,1,3,1,January,2,2,6,6:00am-6:59am,20,20,8,Pedestrian,0,The First Harmful Event was Not a Collision with a Motor Vehicle in Transport,0,No,2,Urban,4,Minor Arterial,2015,2015,467,Chevrolet,1829,Camaro,3,Coupe,20,Chevrolet,2,"2-door sedan,hardtop,coupe",0,Not Applicable,11,"Class 1: 6,000 lbs. or less (2,722 kg or less)",11,"Class 1: 6,000 lbs. or less (2,722 kg or less)",0,No Trailers,0,No Special Use Noted,0,Not Applicable,0,No Rollover,12,12 Clock Point,0,No or Not Reported,20009,Chevrolet Camaro,23,23 Years,1,Male,1,Driver of a Motor Vehicle In-Transport,0,No Apparent Injury (O),11,"Front Seat, Left Side",3,Shoulder and Lap Belt Used,0,No Indication of Misuse,20,Not Applicable,7,None Used/Not Applicable,8,Deployed- Combination,0,Not Ejected,0,Ejection Path Not Applicable,0,Not Extricated or Not Applicable,0,No (Alcohol Not Involved),0,Test Not Given,0,Test Not Given,996,Test Not Given,0,No (drugs not involved),0,Test Not Given,0,Not Transported for Treatment,0,Not Applicable,88,Not Applicable (Non-Fatal),88,Not Applicable (Non-Fatal),8888,Not Applicable (Non-fatal),8888,Not Applicable (Non-fatal),88,Not Applicable (Non-fatal),88,Not Applicable (Non-fatal),999,Unknown,99,Unknown,0,96,Occupant of a Motor Vehicle,8,Occupant of a Motor Vehicle,0,Occupant of a Motor Vehicle,8,Not Applicable (not a fatality),0,Not A Fatality (not Applicable)
1,Alabama,10003,1,2,1,3,1,January,2,2,6,6:00am-6:59am,20,20,8,Pedestrian,0,The First Harmful Event was Not a Collision with a Motor Vehicle in Transport,0,No,2,Urban,4,Minor Arterial,2015,2015,467,Chevrolet,1829,Camaro,3,Coupe,20,Chevrolet,2,"2-door sedan,hardtop,coupe",0,Not Applicable,11,"Class 1: 6,000 lbs. or less (2,722 kg or less)",11,"Class 1: 6,000 lbs. or less (2,722 kg or less)",0,No Trailers,0,No Special Use Noted,0,Not Applicable,0,No Rollover,12,12 Clock Point,0,No or Not Reported,20009,Chevrolet Camaro,19,19 Years,2,Female,2,Passenger of a Motor Vehicle In-Transport,0,No Apparent Injury (O),13,"Front Seat, Right Side",20,None Used/Not Applicable,7,None Used/Not Applicable,20,Not Applicable,7,None Used/Not Applicable,20,Not Deployed,0,Not Ejected,0,Ejection Path Not Applicable,0,Not Extricated or Not Applicable,8,Not Reported,0,Test Not Given,0,Test Not Given,996,Test Not Given,8,Not Reported,0,Test Not Given,0,Not Transported for Treatment,0,Not Applicable,88,Not Applicable (Non-Fatal),88,Not Applicable (Non-Fatal),8888,Not Applicable (Non-fatal),8888,Not Applicable (Non-fatal),88,Not Applicable (Non-fatal),88,Not Applicable (Non-fatal),999,Unknown,99,Unknown,0,96,Occupant of a Motor Vehicle,8,Occupant of a Motor Vehicle,0,Occupant of a Motor Vehicle,8,Not Applicable (not a fatality),0,Not A Fatality (not Applicable)
1,Alabama,10004,0,1,1,97,1,January,3,3,18,6:00pm-6:59pm,34,34,8,Pedestrian,0,The First Harmful Event was Not a Collision with a Motor Vehicle in Transport,0,No,2,Urban,3,Other Principal Arterial,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,60,60 Years,2,Female,5,Pedestrian,4,Fatal Injury (K),0,Not a Motor Vehicle Occupant,96,Not a Motor Vehicle Occupant,8,Not a Motor Vehicle Occupant,96,Not a Motor Vehicle Occupant,8,Not a Motor Vehicle Occupant,97,Not a Motor Vehicle Occupant,8,Not Applicable,0,Ejection Path Not Applicable,0,Not Extricated or Not Applicable,9,Reported as Unknown,2,Test Given,1,Blood,274,0.274 % BAC,9,Reported as Unknown,2,Test Given,0,Not Transported for Treatment,7,Died at Scene,1,January,3,3,2024,2024,1834,1834,18,18:00-18:59,34,34,0,0,0,0,1,0,Not Applicable,0,Not Applicable,11,"Not at Intersection - On Roadway, Not in Marked Crosswalk",0,No,7,Non-Hispanic
{
"STATE":"1",
"STATENAME":"Alabama",
"ST_CASE":"10001",
"VEH_NO":"1",
"PER_NO":"1",
"VE_FORMS":"1",
"COUNTY":"125",
"MONTH":"1",
"MONTHNAME":"January",
"DAY":"1",
"DAYNAME":"1",
"HOUR":"10",
"HOURNAME":"10:00am-10:59am",
"MINUTE":"30",
"MINUTENAME":"30",
"HARM_EV":"42",
"HARM_EVNAME":"Tree (Standing Only)",
"MAN_COLL":"0",
"MAN_COLLNAME":"The First Harmful Event was Not a Collision with a Motor Vehicle in Transport",
"SCH_BUS":"0",
"SCH_BUSNAME":"No",
"RUR_URB":"1",
"RUR_URBNAME":"Rural",
"FUNC_SYS":"4",
"FUNC_SYSNAME":"Minor Arterial",
"MOD_YEAR":"2009",
"MOD_YEARNAME":"2009",
"VPICMAKE":"536",
"VPICMAKENAME":"Pontiac",
"VPICMODEL":"4263",
"VPICMODELNAME":"G6",
"VPICBODYCLASS":"13",
"VPICBODYCLASSNAME":"Sedan/Saloon",
"MAKE":"22",
"MAKENAME":"Pontiac",
"BODY_TYP":"4",
"BODY_TYPNAME":"\"4-door sedan",
"ICFINALBODY":" hardtop\"",
"ICFINALBODYNAME":"0",
"GVWR_FROM":"Not Applicable",
"GVWR_FROMNAME":"11",
"GVWR_TO":"\"Class 1: 6",
"GVWR_TONAME":"000 lbs. or less (2",
"TOW_VEH":"722 kg or less)\"",
"TOW_VEHNAME":"11",
"SPEC_USE":"\"Class 1: 6",
"SPEC_USENAME":"000 lbs. or less (2",
"EMER_USE":"722 kg or less)\"",
"EMER_USENAME":"0",
"ROLLOVER":"No Trailers",
"ROLLOVERNAME":"0",
"IMPACT1":"No Special Use Noted",
"IMPACT1NAME":"0",
"FIRE_EXP":"Not Applicable",
"FIRE_EXPNAME":"3",
"MAK_MOD":"Rollover",
"MAK_MODNAME":"12",
"AGE":"12 Clock Point",
"AGENAME":"0",
"SEX":"No or Not Reported",
"SEXNAME":"22022",
"PER_TYP":"Pontiac G6",
"PER_TYPNAME":"50",
"INJ_SEV":"50 Years",
"INJ_SEVNAME":"1",
"SEAT_POS":"Male",
"SEAT_POSNAME":"1",
"REST_USE":"Driver of a Motor Vehicle In-Transport",
"REST_USENAME":"4",
"REST_MIS":"Fatal Injury (K)",
"REST_MISNAME":"11",
"HELM_USE":"\"Front Seat",
"HELM_USENAME":" Left Side\"",
"HELM_MIS":"3",
"HELM_MISNAME":"Shoulder and Lap Belt Used",
"AIR_BAG":"0",
"AIR_BAGNAME":"No Indication of Misuse",
"EJECTION":"20",
"EJECTIONNAME":"Not Applicable",
"EJ_PATH":"7",
"EJ_PATHNAME":"None Used/Not Applicable",
"EXTRICAT":"1",
"EXTRICATNAME":"Deployed- Front",
"DRINKING":"0",
"DRINKINGNAME":"Not Ejected",
"ALC_STATUS":"0",
"ALC_STATUSNAME":"Ejection Path Not Applicable",
"ATST_TYP":"9",
"ATST_TYPNAME":"Unknown",
"ALC_RES":"1",
"ALC_RESNAME":"Yes (Alcohol Involved)",
"DRUGS":"2",
"DRUGSNAME":"Test Given",
"DSTATUS":"1",
"DSTATUSNAME":"Blood",
"HOSPITAL":"330",
"HOSPITALNAME":"0.330 % BAC",
"DOA":"1",
"DOANAME":"Yes (drugs involved)",
"DEATH_MO":"2",
"DEATH_MONAME":"Test Given",
"DEATH_DA":"0",
"DEATH_DANAME":"Not Transported for Treatment",
"DEATH_YR":"7",
"DEATH_YRNAME":"Died at Scene",
"DEATH_TM":"1",
"DEATH_TMNAME":"January",
"DEATH_HR":"1",
"DEATH_HRNAME":"1",
"DEATH_MN":"2024",
"DEATH_MNNAME":"2024",
"LAG_HRS":"1030",
"LAG_HRSNAME":"1030",
"LAG_MINS":"10",
"LAG_MINSNAME":"10:00-10:59",
"STR_VEH":"30",
"DEVTYPE":"30",
"DEVTYPENAME":"0",
"DEVMOTOR":"0",
"DEVMOTORNAME":"0",
"LOCATION":"0",
"LOCATIONNAME":"0",
"WORK_INJ":"96",
"WORK_INJNAME":"Occupant of a Motor Vehicle",
"HISPANIC":"8",
"HISPANICNAME":"Occupant of a Motor Vehicle"
}
Tesla Model Y / Tesla Model 3 汽车安全分析
# 如何使用 shell 命令过滤出所有包含 Tesla 的行
$ grep 'Tesla' FARS2024NationalCSV/person.csv > tesla_rows.csv
CSV 转换为中文表头的 JSON
// awesome version awesome 🚀, 输出的 json 文件格式无误,有外层 {} 包裹, 每一行都是一个有索引的 json
const fs = require('fs');
const readline = require('readline');
// 英文表头到中文的映射(请补充完整)
const headerMap = {
"STATE": "州代码",
"STATENAME": "州名",
"ST_CASE": "案例编号",
"VEH_NO": "车辆编号",
"PER_NO": "人员编号",
"VE_FORMS": "车辆表单代码",
"COUNTY": "县代码",
"MONTH": "月份",
"MONTHNAME": "月份名称",
"DAY": "日",
"DAYNAME": "星期几",
"HOUR": "小时",
"HOURNAME": "小时名称",
"MINUTE": "分钟",
"MINUTENAME": "分钟名称",
"HARM_EV": "主要有害事件代码",
"HARM_EVNAME": "主要有害事件名称",
"MAN_COLL": "碰撞方式代码",
"MAN_COLLNAME": "碰撞方式名称",
"SCH_BUS": "校车相关代码",
"SCH_BUSNAME": "校车相关名称",
"RUR_URB": "城乡代码",
"RUR_URBNAME": "城乡名称",
"FUNC_SYS": "功能系统代码",
"FUNC_SYSNAME": "功能系统名称",
"MOD_YEAR": "车辆年份",
"MOD_YEARNAME": "车辆年份名称",
"VPICMAKE": "制造商代码",
"VPICMAKENAME": "制造商名称",
"VPICMODEL": "车型代码",
"VPICMODELNAME": "车型名称",
"VPICBODYCLASS": "车身类型代码",
"VPICBODYCLASSNAME": "车身类型名称",
"MAKE": "制造商代码",
"MAKENAME": "制造商品牌",
"BODY_TYP": "车身类型代码",
"BODY_TYPNAME": "车身类型名称",
"ICFINALBODY": "最终车身代码",
"ICFINALBODYNAME": "最终车身名称",
"GVWR_FROM": "总重起始值",
"GVWR_FROMNAME": "总重起始名称",
"GVWR_TO": "总重结束值",
"GVWR_TONAME": "总重结束名称",
"TOW_VEH": "拖车代码",
"TOW_VEHNAME": "拖车名称",
"SPEC_USE": "特殊用途代码",
"SPEC_USENAME": "特殊用途名称",
"EMER_USE": "紧急用途代码",
"EMER_USENAME": "紧急用途名称",
"ROLLOVER": "翻车代码",
"ROLLOVERNAME": "翻车名称",
"IMPACT1": "首次碰撞点代码",
"IMPACT1NAME": "首次碰撞点名称",
"FIRE_EXP": "起火代码",
"FIRE_EXPNAME": "起火名称",
"MAK_MOD": "制造商型号代码",
"MAK_MODNAME": "制造商型号名称",
"AGE": "年龄",
"AGENAME": "年龄名称",
"SEX": "性别代码",
"SEXNAME": "性别",
"PER_TYP": "人员类型代码",
"PER_TYPNAME": "人员类型名称",
"INJ_SEV": "伤害严重程度代码",
"INJ_SEVNAME": "伤害严重程度",
"SEAT_POS": "座位位置代码",
"SEAT_POSNAME": "座位位置名称",
"REST_USE": "约束装置使用代码",
"REST_USENAME": "约束装置使用名称",
"REST_MIS": "约束装置误用代码",
"REST_MISNAME": "约束装置误用名称",
"HELM_USE": "头盔使用代码",
"HELM_USENAME": "头盔使用名称",
"HELM_MIS": "头盔误用代码",
"HELM_MISNAME": "头盔误用名称",
"AIR_BAG": "安全气囊代码",
"AIR_BAGNAME": "安全气囊名称",
"EJECTION": "弹出代码",
"EJECTIONNAME": "弹出名称",
"EJ_PATH": "弹出路径代码",
"EJ_PATHNAME": "弹出路径名称",
"EXTRICAT": "解救代码",
"EXTRICATNAME": "解救名称",
"DRINKING": "饮酒代码",
"DRINKINGNAME": "饮酒名称",
"ALC_STATUS": "酒精状态代码",
"ALC_STATUSNAME": "酒精状态名称",
"ATST_TYP": "酒精测试类型代码",
"ATST_TYPNAME": "酒精测试类型名称",
"ALC_RES": "酒精测试结果代码",
"ALC_RESNAME": "酒精测试结果名称",
"DRUGS": "毒品代码",
"DRUGSNAME": "毒品名称",
"DSTATUS": "死亡状态代码",
"DSTATUSNAME": "死亡状态名称",
"HOSPITAL": "医院代码",
"HOSPITALNAME": "医院名称",
"DOA": "到院时状态代码",
"DOANAME": "到院时状态名称",
"DEATH_MO": "死亡月份代码",
"DEATH_MONAME": "死亡月份名称",
"DEATH_DA": "死亡日期代码",
"DEATH_DANAME": "死亡日期名称",
"DEATH_YR": "死亡年份代码",
"DEATH_YRNAME": "死亡年份名称",
"DEATH_TM": "死亡时间代码",
"DEATH_TMNAME": "死亡时间名称",
"DEATH_HR": "死亡小时代码",
"DEATH_HRNAME": "死亡小时名称",
"DEATH_MN": "死亡分钟代码",
"DEATH_MNNAME": "死亡分钟名称",
"LAG_HRS": "延迟小时代码",
"LAG_HRSNAME": "延迟小时名称",
"LAG_MINS": "延迟分钟代码",
"LAG_MINSNAME": "延迟分钟名称",
"STR_VEH": "结构车辆代码",
"DEVTYPE": "装置类型代码",
"DEVTYPENAME": "装置类型名称",
"DEVMOTOR": "装置马达代码",
"DEVMOTORNAME": "装置马达名称",
"LOCATION": "位置代码",
"LOCATIONNAME": "位置名称",
"WORK_INJ": "工伤代码",
"WORK_INJNAME": "工伤名称",
"HISPANIC": "西班牙裔代码",
"HISPANICNAME": "西班牙裔名称"
};
const inputFile = 'tesla_rows.csv';
const outputFile = 'tesla_rows_zh.json';
const readStream = fs.createReadStream(inputFile);
const writeStream = fs.createWriteStream(outputFile, { flags: 'w' });
const rl = readline.createInterface({
input: readStream,
crlfDelay: Infinity
});
let headers = [];
let isFirstLine = true;
const lines = [];
rl.on('line', (line) => {
if (isFirstLine) {
headers = line.split(',');
isFirstLine = false;
} else {
const values = line.split(',');
const obj = {};
headers.forEach((header, idx) => {
const zhKey = headerMap[header] || header;
obj[zhKey] = values[idx];
});
// lines.push(JSON.stringify(obj,null,4));
lines.push(obj);
}
});
let objects = {};
rl.on('close', () => {
for([index, line] of lines.entries()) {
objects[`${index}`] = line;
}
// 一次格式化写入 🚀
writeStream.write(JSON.stringify(objects, null, 4) + '\n');
writeStream.end();
console.log('CSV 已转换为中文表头的 JSON 文件。');
});
// rl.on('close', () => {
// // begin
// writeStream.write(`{` + '\n');
// for([index, line] of lines.entries()) {
// if(index !== lines.length - 1) {
// writeStream.write(` "${index}":` + JSON.stringify(line) + ',\n');
// } else {
// writeStream.write(` "${index}":` + JSON.stringify(line) + '\n');
// }
// // if(index === 0) {
// // writeStream.write(`"${index}":` + JSON.stringify(line, null, 2) + '\n');
// // } else {
// // writeStream.write(`,\n "${index}":` + JSON.stringify(line, null, 2) + '\n');
// // }
// }
// // end
// writeStream.write(`}`);
// writeStream.end();
// console.log('CSV 已转换为中文表头的 JSON 文件。');
// });
// // begin
// writeStream.write(`{` + '\n');
// let index = 0;
// rl.on('line', (line) => {
// if (isFirstLine) {
// headers = line.split(',');
// isFirstLine = false;
// } else {
// const values = line.split(',');
// const obj = {};
// headers.forEach((header, idx) => {
// const zhKey = headerMap[header] || header;
// obj[zhKey] = values[idx];
// });
// // writeStream.write(JSON.stringify(obj, null, 2) + '\n');
// if(index === 0) {
// // 不加逗号
// writeStream.write(` "${index}": ` + JSON.stringify(obj, null, 4));
// } else {
// // 在前面在逗号
// writeStream.write(`, "${index}": ` + JSON.stringify(obj, null, 4));
// }
// // ❌ 最后一行多余一个逗号
// // writeStream.write(`"${index}":` + JSON.stringify(obj, null, 2) + ',\n');
// index++;
// }
// });
// rl.on('close', () => {
// // end
// writeStream.write('\n' + `}`);
// writeStream.end();
// console.log('CSV 已转换为中文表头的 JSON 文件。');
// });
©xgqfrms 2012-2021
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。