javascript - 如何将 CSV 转换为 JS 对象数组
问题描述
将 CSV 文件转换为 JS 对象后,我得到了以下结构
"category,name,includeInAuto,srNumber,testType
"Test1","Name1","true",1,"type1"
"Test2","Name2","true",1,"type2"
"Test3","Name3","true",1,"type3"
"Test4","Name4","true",1,"type4"
"Test5","Name5","true",1,"type5"
"Test6","Name6","true",1,"type6"
"Test7","Name7","true",1,"type7"
我正在尝试将其转换如下
[{"category": "Test1", "name": "Name1", "includeInAuto": "true", "srNumber": 1 "testType": "type1"},
{"category": "Test2", "name": "Name2", "includeInAuto": "true", "srNumber": 2 "testType": "type2"},
{"category": "Test3", "name": "Name3", "includeInAuto": "true", "srNumber": 3 "testType": "type3"},
{"category": "Test4", "name": "Name4", "includeInAuto": "true", "srNumber": 4 "testType": "type4"},
{"category": "Test5", "name": "Name5", "includeInAuto": "true", "srNumber": 5 "testType": "type5"},
{"category": "Test6", "name": "Name6", "includeInAuto": "true", "srNumber": 6 "testType": "type6"},
{"category": "Test7", "name": "Name7", "includeInAuto": "true", "srNumber": 7 "testType": "type7"}]
我尝试过使用 map like Object.entries(obj);
orObject.keys(obj);
或先将其转换为数组Array.from(obj)
,但没有得到预期的结果。
最重要的方法是将每个单词分成单个字符,例如“c”、“a”、“t”、“e”、“g”、“o”、“r”、“y”
有人可以帮我实现同样的目标吗?
更新
如果我在 excel 中编辑 csv 文件,然后尝试解析它,那么我得到一个下面的结构,而不是用双引号将所有值括起来,整个数据用双引号括起来,如下所示
"category,name,includeInAuto,srNumber,testType
Test1,Name1,true,1,type1
Test2,Name2,true,2,type2
Test3,Name3,true,3,type3
Test4,Name4,true,4,type4
Test5,Name5,true,5,type5
Test6,Name6,true,6,type6
Test7,Name7,true,7,type7"
如果不是高于任何值,则假设其中有任何特殊字符,如果我将 name7 更改为 name,7 则 FileReader 返回以下结构
"category,name,includeInAuto,srNumber,testType
Test1,Name1,true,1,type1
Test2,Name2,true,2,type2
Test3,Name3,true,3,type3
Test4,Name4,true,4,type4
Test5,Name5,true,5,type5
Test6,Name6,true,6,type6
Test7,\"Name,7\",true,6,type6"
在上面的整个 csv 字符串中是双引号,但名称 name, 7 也在双引号中,现在带有一些额外的斜杠,而不是 4 个逗号分隔值,我们有 5 个逗号分隔值。
解决方案
I would suggest using a dedicated CSV parser, like PapaParse, this is exactly what they are designed to do.
Parsing CSV data can get really tricky once you get into quoting etc.
let csv = `category,name,includeInAuto,srNumber,testType
"Test1","Name1","true",1,"type1"
"Test2","Name2","true",1,"type2"
"Test3","Name3","true",1,"type3"
"Test4","Name4","true",1,"type4"
"Test5","Name5","true",1,"type5"
"Test6","Name6","true",1,"type6"
"Test7","Name7","true",1,"type7"`;
let result = Papa.parse(csv, { header: true, dynamicTyping: true });
console.log("Result:", result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/5.1.0/papaparse.min.js"></script>
推荐阅读
- javascript - 从复杂的物化路径类别层次结构数据中获取一个数组
- java - 锁定/重试与异常流
- asp.net - 在 .Net 3.5 项目中使用 .Net 4.5 库
- ios - 从滚动视图中的视图触发操作
- html - 如何在顺风中正确溢出下拉列表?
- python - iPython/Iris 数据集:简单如何在一个绘图上组合 3 个不同的变量/视图(kmeans、随机 kmeans、PCA)进行比较?
- web-push - 是否可以将网络推送消息从一个浏览器发送到另一个浏览器?
- gulp - Gulp 不会在 https://app.netlify.com/ 上创建 dist 文件夹
- android - android 10中使用图像Uri的毕加索图像旋转问题
- android - 无障碍服务开启时如何显示弹窗讯息?