You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS入门求助:如何将CSV格式文本文件转换为JSON对象?

搞定CSV转JSON:给JavaScript新手的分步指南

嘿,作为刚接触JavaScript的新手,碰到CSV转JSON的坑太正常了——我当初第一次处理的时候也踩过split拆分的雷!别担心,我一步步带你写出正确的转换代码,生成你想要的「表头为键、行数据为值」的JSON结构。

先搞懂你之前的问题在哪

直接用split(',')拆分CSV的最大问题是:如果你的字段里包含逗号(比如"Smith, John"这种带引号的名字),或者行尾有多余空格,简单拆分就会把一个字段拆成多个,导致键值对完全错位。咱们先从基础的「无复杂字段」的CSV开始,再进阶到更通用的情况。

基础版:处理无特殊字符的CSV

假设你的CSV文本是这样的(没有逗号在字段里,没有换行在字段中):

JOBID,NAME,STATUS
1,Task A,Completed
2,Task B,In Progress
3,Task C,Pending

下面是完整的转换代码,每一步我都给你标清楚:

// 假设你已经读取到了CSV文本(比如通过文件读取或者输入框获取)
const csvText = `JOBID,NAME,STATUS
1,Task A,Completed
2,Task B,In Progress
3,Task C,Pending`;

// 1. 把CSV按换行拆成行数组,同时过滤掉空行(避免最后一行是空的情况)
const rows = csvText.split('\n').filter(row => row.trim() !== '');

// 2. 提取第一行作为表头,同时去掉每个表头的前后空格
const headers = rows[0].split(',').map(header => header.trim());

// 3. 遍历剩下的数据行,把每一行转成键值对对象
const jsonData = rows.slice(1).map(row => {
  // 拆分当前行的数值,同样去掉前后空格
  const values = row.split(',').map(value => value.trim());
  // 创建空对象,把表头和对应数值配对
  const jobObj = {};
  headers.forEach((header, index) => {
    jobObj[header] = values[index];
  });
  return jobObj;
});

// 4. 如果需要把结果转成格式化的JSON字符串,用这个
const jsonString = JSON.stringify(jsonData, null, 2);
console.log(jsonString);

运行后你会得到这样的JSON结构,完全符合你的需求:

[
  {
    "JOBID": "1",
    "NAME": "Task A",
    "STATUS": "Completed"
  },
  {
    "JOBID": "2",
    "NAME": "Task B",
    "STATUS": "In Progress"
  },
  {
    "JOBID": "3",
    "NAME": "Task C",
    "STATUS": "Pending"
  }
]

进阶版:处理带引号、含逗号的复杂CSV

如果你的CSV里有像JOBID,NAME,STATUS\n4,"Doe, John",Completed这种带引号的字段,直接用split(',')就会把"Doe, John"拆成两个值,这时候咱们用正则表达式来正确解析每一行的字段:

// 专门解析CSV行的函数,处理带引号的字段
const parseCSVRow = (row) => {
  // 这个正则会匹配:要么是带引号的内容,要么是不带引号的内容
  const regex = /(?:^|,)(?:"([^"]*)"|([^",]*))/g;
  const values = [];
  let match;
  // 循环匹配所有字段
  while ((match = regex.exec(row)) !== null) {
    // 优先取引号里的内容,没有的话取普通内容,空的话填''
    values.push(match[1] || match[2] || '');
  }
  // 去掉每个字段的前后空格
  return values.map(v => v.trim());
};

// 然后把之前的values拆分替换成这个函数就行
const jsonData = rows.slice(1).map(row => {
  const values = parseCSVRow(row);
  const jobObj = {};
  headers.forEach((header, index) => {
    jobObj[header] = values[index];
  });
  return jobObj;
});

这样就算字段里有逗号,也能正确解析成一个完整的字段值啦!

小提示

  • 如果你的CSV是从文件读取的,注意处理文件编码(一般是UTF-8),避免乱码;
  • 如果数据量特别大,建议用流式处理,但作为新手,先把小数据的转换搞懂就好啦!

内容的提问来源于stack exchange,提问作者tautf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:19:22