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

目录
相关文章
|
16天前
|
JSON 前端开发 JavaScript
在JavaScript中,异步编程是一种处理非阻塞操作(如网络请求、文件读写等)的重要技术
【6月更文挑战第12天】JavaScript中的异步编程通过Promise和async/await处理非阻塞操作。Promise管理异步操作的三种状态,防止回调地狱,支持链式调用和并行处理。async/await是ES8引入的语法糖,使异步代码更像同步代码,提高可读性。两者结合使用能更高效地处理复杂异步场景。
23 3
|
14天前
|
前端开发 JavaScript 数据处理
前端新手指南:如何解决JavaScript导出CSV文件不完整的问题
【6月更文挑战第4天】在JavaScript中处理CSV文件时,需要特别注意一些特殊字符,例如逗号、双引号、换行符等。这些字符可能会影响CSV文件的解析,导致数据错乱。
49 0
|
5天前
|
Web App开发 JSON JavaScript
JavaScript对象常用操作JSON总结
JavaScript对象常用操作JSON总结
18 8
|
4天前
|
JavaScript 前端开发 API
探讨JavaScript动态添加HTML文件的技术
探讨JavaScript动态添加HTML文件的技术
11 1
|
10天前
|
JSON 数据格式
Notepad++怎么格式化json文件?
Notepad++怎么格式化json文件?
13 3
|
9天前
|
JavaScript 前端开发 开发者
介绍如何在WebStorm中调试JavaScript文件
介绍如何在WebStorm中调试JavaScript文件
11 1
|
10天前
|
JSON JavaScript 前端开发
jQuery获取json文件的方法
jQuery获取json文件的方法
12 2
|
13天前
|
JSON JavaScript 前端开发
js将json字符串还原为json
【6月更文挑战第15天】js将json字符串还原为json
19 4
|
14天前
|
Windows
[ app.json 文件内容错误] app.json: window.navigationBarTextStyle 字段需为 black,white【已解决】
[ app.json 文件内容错误] app.json: window.navigationBarTextStyle 字段需为 black,white【已解决】
11 1
|
17天前
|
存储 JSON JavaScript
JavaScript基础-对象与JSON
【6月更文挑战第11天】本文介绍了JavaScript对象的创建(字面量、构造函数、Class)与操作,包括属性访问和描述符。同时讲解了JSON的性质及其与JS对象的关系,以及序列化和解析过程。文章还列举了三个常见易错点(属性访问错误、JSON格式错误、循环引用)并提供了避免策略。通过代码示例展示如何操作对象和处理JSON,强调实践对于掌握这些概念的重要性。