JavaScript将CSV文件转为JSON

简介: JavaScript将CSV文件转为JSON

说在前面

相信平时大家或多或少都会有遇到过类似的情况:

🙎(需求小姐姐) 🙎‍♂(我)

🙎:这里我们需要做一个省市联动下拉框,你看看可以做吗?

🙎‍♂:可以的,下拉框数据是通过接口获取吗?

🙎:不是,等下我给你发一份数据,你直接用那份数据就可以了。

🙎‍♂:好的。

…………两分钟后

🙎:地市区县.csv

csv 文件数据格式如下:

这个时候就需要我们先将csv文件转成我们想要的json格式数据了

TextDecoder

TextDecoder 接口表示一个文本解码器,一个解码器只支持一种特定文本编码,例如 UTF-8、ISO-8859-2、KOI8-R、GBK,等等。解码器将字节流作为输入,并提供码位流作为输出。

csv 文件的解析我们可以借助TextDecoder来完成,主要用到下面的构造函数及实例方法:

TextDecoder()

TextDecoder() 构造函数使用参数中指定的编码返回一个新创建的 TextDecoder 对象。

  • 语法
new TextDecoder();
new TextDecoder(utfLabel);
new TextDecoder(utfLabel, options);
  • 参数
utfLabel 可选
一个字符串,默认是 "utf-8"。可以是任意有效的编码。
options 可选
一个具有属性的对象:
fatal
一个布尔值,表示在解码无效数据时,TextDecoder.decode() 方法是否必须抛出 TypeError。默认是 false,这意味着解码器将用替换字符替换错误的数据。

TextDecoder.decode()

TextDecoder.decode() 方法返回一个字符串,其包含作为参数传递的缓冲区解码后的文本。

  • 语法
decode();
decode(buffer);
decode(buffer, options);
  • 参数
buffer 可选
一个 ArrayBuffer、TypedArray 或包含要解码的编码文本的 DataView 对象。
options 可选
具有以下属性的对象:
stream
一个布尔标志,表示在后续调用 decode() 将跟随附加数据。如果以分块的形式处理数据,则设置为 true;如果是最终的分块或者数据没有分块,则设置为 false。默认是 false。
  • 浏览器兼容

转换代码

简单了解了TextDecoder之后,我们便可以开始进行转换代码编写了,想了解更多的可以直接到 mdn 查看具体文档:https://developer.mozilla.org/zh-CN/docs/Web/API/TextDecoder/TextDecoder

1、首先我们可以通过readFileSync获取到我们需要操作的文件:

const fs = require("fs");
const dir = "地市区县.csv";
const file = fs.readFileSync(`./static/${dir}`);

2、使用 TextDecoder 获取文件文本

const getTxt = new TextDecoder("UTF-8").decode(file);
console.log(getTxt);

3、将文本按行分割

const getTxt = new TextDecoder("UTF-8").decode(file).split("\r\n");
console.log(getTxt);

4、重组数据

获取到数据文本之后,我们还需要将其转换成我们想要的json格式,这里我们已经将文本按行分割成一个数组,数组中的一项就是代表 csv 文件中的一行,其中第一行即为表头。

const json = {};
const textLen = getTxt.length;
// 遍历文件, 注意是从 i = 1 开始, 因为不需要表头
for (let i = 1; i < textLen; i++) {
  const textItem = getTxt[i].split(",");
  if (!json[textItem[0]]) {
    json[textItem[0]] = [];
  }
  json[textItem[0]].push(textItem[1]);
}
console.log(json);

5、将拼接的 json 数据 写入新的 json 文件

// 得到不需要文件后缀的名称
const getFile = dir.split(".")[0];
// 写入文件数据
fs.writeFileSync(`./file/${getFile}.json`, JSON.stringify(json));

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号(前端也能这么有趣)发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
25天前
|
Web App开发 JSON JavaScript
SAP UI5 应用程序小技巧 - 一键将 JSON 对象导出成本地 json 文件
SAP UI5 应用程序小技巧 - 一键将 JSON 对象导出成本地 json 文件
19 0
|
25天前
|
JSON 数据格式 开发者
什么是 JSON 文件的 Schema
什么是 JSON 文件的 Schema
83 0
|
27天前
|
XML JSON JavaScript
|
29天前
|
JSON JavaScript 前端开发
JavaScript 如何对 JSON 数据进行冒泡排序?
JavaScript 如何对 JSON 数据进行冒泡排序?
45 0
|
29天前
|
存储 JavaScript 前端开发
只使用简单的 JavaScript 创建文件共享型网站
只使用简单的 JavaScript 创建文件共享型网站
30 0
只使用简单的 JavaScript 创建文件共享型网站
|
1月前
|
JavaScript Android开发
AutoJs4.1.0实战教程---js文件打包发布成APK文件
AutoJs4.1.0实战教程---js文件打包发布成APK文件
19 0
AutoJs4.1.0实战教程---js文件打包发布成APK文件
|
1月前
|
XML 存储 JSON
Python学习 -- 常用数据交换格式(CSV、XML、JSON)
Python学习 -- 常用数据交换格式(CSV、XML、JSON)
16 0
|
1月前
|
Web App开发 前端开发
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
126 0
|
24天前
|
编解码 JavaScript 前端开发
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
TypeScript【第三方声明文件、自定义声明文件、tsconfig.json文件简介、tsconfig.json 文件结构与配置】(六)-全面详解(学习总结---从入门到深化)
34 0
|
19天前
|
JSON JavaScript 前端开发
Python之JavaScript逆向系列——接口JSON信息获取与操作
Python之JavaScript逆向系列——接口JSON信息获取与操作
34 0

相关产品

  • 云迁移中心