惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - xgqfrms

Dell 显示器 S2419HM 灰屏 &花屏 All In One AI Harness Engineering All In One 电脑外接显示器天梯榜 All In One How to change the speed display unit of GSP from mph to km/h using GoPro Labs All In One WHCA 白宫记者协会 All In One Pascal Editor All In One 主流犬种图解指南 All In One 泡沫喷雾 & 辣椒喷雾 All In One 如何给身份证照片添加水印 All In One GoPro MISSION 1 PRO price All In One 杭州历史天气数据 All In One Pandoc All In One GoPro MISSION 1 SERIES All In One GoPro telemetry 中的 GPS5 与 GPS9 是什么 All In One How to extract raw telemetry data from GoPro videos using FFmpeg All In One Free Vercel Services All In One How to run for loop in Python REPL All In One 使用不同 AI 大模型生成一杯装满的红酒的高脚杯挑战赛 All In One CSS Custom Highlight API All In One OpenCode All In One OpenClaw 设置 cron 定时任务 All In One free MongoDB Cloud API All In One 如何在 Raspberry Pi 安装 OpenClaw All In One free cloud LLM models API All In One Claude Code Free Video Tutorials All In One 如何解决 OpenClaw 升级后导致 feishu plugin 无法使用的问题 All In One Claude Code skills & plugins All In One LLM Benchmark All In One How to fix use the FileZilla FTP upload file error All In One
NHTSA FARS All In One
xgqfrms · 2026-04-14 · via 博客园 - xgqfrms

NHTSA FARS All In One

National Highway Traffic Safety Administration / 美国国家公路交通安全管理局

FARS

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/

image

CSV to JSON

// 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"
}

demos

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 文件。');
// });

refs

©xgqfrms 2012-2021

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!