来源:公众号《前端全栈开发者》(ID:by-zhangbing-dev)

将CSV转换为JSON是一项需要做很多工作的任务,在本文中,我将研究如何使用 csvtojson 模块将CSV转换为JSON。

CSV简介

CSV即Comma Separate Values,其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也是方法之一。

CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用,经常用来作为不同程序之间的数据交互的格式,最广泛的应用是在程序之间转移表格数据。

来自搜狗百科:https://baike.sogou.com/v249053.htm?fromTitle=CSv

安装

csvtojson 可作为NPM模块使用。我们可以运行以下命令进行安装:

npm i csvtojson

该软件包可与浏览器和Node.js一起使用。

基本使用

我们可以从文件中获取CSV并将其转换为JSON,也可以从字符串中获取CSV并执行相同的操作。

例如,我们可以从文件中获取CSV并将其转换为JSON,如下所示:

person.csv

first_name,last_name
john,smith
jane,smith

index.js

const csvFilePath = 'person.csv'
const csv = require('csvtojson');
(async () => {const jsonObj = await csv().fromFile(csvFilePath)console.log(jsonObj);
})();

在上面的代码中,我们调用了 csv 函数,该函数使用带有文件路径的 fromFile 方法返回一个对象。

然后,当我们像上面一样登录 jsonObj 时,我们得到:

[ { first_name: 'john', last_name: 'smith' },{ first_name: 'jane', last_name: 'smith' } ]

我们还可以将CSV从字符串解析为JSON。为此,我们可以编写以下代码:

const csv = require('csvtojson');
const csvStr = `first_name,last_name
john,smith
jane,smith`;
(async () => {const jsonObj = await csv().fromString(csvStr)console.log(jsonObj);
})();

在上面的代码中,我们有 csvStr,其中包含存储在字符串中的相同CSV内容。

然后我们调用 fromString 而不是 fromFile 来获取CSV内容,并使用解析后的数据解析返回 Promise。

因此,我们得到与第一个示例相同的结果。

异步处理来自CSV URL的每一行

我们可以使用 subscribe 方法逐行解析CSV字符串。例如,我们可以如下使用它:

const csv = require('csvtojson');
const csvFilePath = 'person.csv'
csv()
.fromFile(csvFilePath)
.subscribe((json) => console.log(json), () => console.log('error'), () => console.log('success')
);

在上面的代码中,我们调用了 fromFile 方法,但是我们在后面调用了 subscribe 方法,而不是从promise中获取解析后的值。

然后,我们将解析的值一次只获取一行,而不是将其全部打包在一个数组中。

转换为CSV行

我们还可以用 subscribe 方法和 'line' 输出选项一次一行地获得原始CSV行。

例如,我们可以调用以下代码:

const csv = require('csvtojson');
const csvFilePath = 'person.csv'
csv({ output: "line" })
.fromFile(csvFilePath)
.subscribe((csvLine) => console.log(csvLine))

然后我们得到:

john,smith
jane,smith

从控制台日志输出。

选项配置项

我们传递给 csv 函数的对象可以采用以下选项:

  • output——要转换的格式。它可以是 'json',这是默认的,'csv',这是一个csv行,或者 'line',它将csv转换成一个csv行字符串。
  • delimiter——用于分隔列的分隔符。'auto' 应该是未知值。
  • quote——如果列中有定界符,则可以使用引号字符将列内容括起来,这样,'hello,world' 之类的文本就不会被视为包含在两列中。
  • trim——如果要去除空格则为 true,否则为 false
  • checkType——打开和关闭是否检查字段类型。
  • ignoreEmpty——忽略CSV列中的空值。
  • noheader——如果我们解析的CSV中没有标题,则返回 true
  • headers——一个用于指定CSV数据标题的数组。如果为 false,则此值将覆盖CSV标头行。
  • flatKeys——不将标题字段中的 .[] 解释为嵌套对象。默认为 false
  • maxRowLength——CSV行可以包含的最大字符。
  • checkColumn——检查行的列号是否与标题相同。
  • eol——要检查的行尾字符。
  • escape——用引号引起来的转义字符。默认为双引号。
  • includeColumns——正则表达式,包含列的模式。
  • ignoreColumns——带有模式的正则表达式,可忽略的列。
  • colParser——一个JSON对象来重写如何解析列。例如 { foo : 'number'} 将把 foo 字段解析为一个数字。
  • alwaysSplitAtEOL——布尔值,指示是否按行末尾分割每行。
  • nullObject——布尔值,指示我们是否保持 null
  • downstreamFormat——选项设置下游所需的JSON数组格式。解析为CSV行可以为 'line',向下游编写完整的JSON数组可以为 'array'
  • needEmitAll——如果调用 .then 或使用 await,则解析器将生成JSON结果。

结束

使用 csvtojson Node包,将CSV解析为JSON很容易。

它逐行返回一个Promise或发送解析过的CSV,这样我们就可以用自己喜欢的方式处理它们。

解析是异步完成的,因此性能不会成为问题。

C# json解析字符串总是多出双引号_在JavaScript应用中将CSV转换为JSON相关推荐

  1. C# json解析字符串总是多出双引号_python小课堂25 - 你真的了解JSON嘛?

    python小课堂25 - 你真的了解JSON嘛? 前言 原谅我标题党了一波,哈哈哈哈!其实今天这篇文章算是题外番了,为什么这么说呢?因为JSON这个词,在当今的web环境下,作为一种最常使用的数据格 ...

  2. C# json解析字符串总是多出双引号_一篇长文带你在python里玩转Json数据

    Json简介 Json(JavaScript Object Notation) 很多网站都会用到Json格式来进行数据的传输和交换,就像上篇我提到的网易云音乐接口,它们返回的数据都是Json格式的. ...

  3. C# json解析字符串总是多出双引号_【c#资料】爬虫 Jumony-html 解析

    添加DLL IDE是Visual Studio 2013,我是在NugGet中搜索,并添加到项目中. 2. Jumony的常见用法 从网站获取html代码,将html字符串分析为标准的文档对象模型(D ...

  4. C# json解析字符串总是多出双引号_Python小白必备知识:Python字符串详解

    若干个字符的集合就是一个字符串(String).Python 中的字符串必须由双引号" "或者单引号' '包围,具体格式为: "字符串内容" '字符串内容' 字 ...

  5. C# json解析字符串总是多出双引号_json从立地到成佛

    本文原创作者bigsai(同公众号),本文以浅显易懂的方式给大家讲解自己所认知的json,如果有错误或者不准确地方还请大家给出指正,另外本文以关卡课程的方式在博学谷也是免费开放的,大家也可通过关卡方式 ...

  6. 解决特殊字符引起json解析错误--单引号、双引号转义

    解决特殊字符引起json解析错误–单引号.双引号转义 这几天在做一个题库管理,遇到了一个问题,将后台的json数据传到前台用parse解析时,出现了一个错误: Uncaught SyntaxError ...

  7. Word处理控件Aspose.Words功能演示:在 Java 中将 DOCX 转换为 JSON

    Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word.此 ...

  8. IntelliJ idea——》JSON字符串,自动转义双引号

    版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者. https://blog.csdn.net/weixin_43453386/article/detai ...

  9. 字符串处理--去除首尾双引号

    项目场景: 使用shell脚本处理带有双引号的文本 问题描述: 数据示例 "{""_index"":""uke_device_op ...

最新文章

  1. Android Fragment 调用宿主Activity 里面的方法
  2. retina 负样本回归增强loss
  3. 树莓派AI视觉云台——7、树莓派系统备份
  4. 有感而发 - 日新月异的SAP开发技术
  5. 如何接收串口数据_UART IDLE 中断使用接收不定长串口数据
  6. python pandas csv getitem_Python调用pandas 读csv档时出现了错误
  7. 关于一个跨域的小问题
  8. kindeditor编辑器
  9. rcmd–App Switcher for Mac快速切换应用程序
  10. WCF服务离线操作与消息队列MSMQ(转)
  11. CSS优先级、引入方式、Hack
  12. 拉格朗日函数最优化问题
  13. jboss forge整合 hibersap
  14. java模拟器怎么调中文_电脑java模拟器(javagame模拟器)
  15. 012_SSS_ Improving Diffusion Model Efficiency Through Patching
  16. 电脑蓝屏了怎么办修复,电脑蓝屏解决修复方法
  17. 输入四个整数,输出其中最小的数
  18. 网格电流例题(cubic resistor|立方网格电流)
  19. 【文件操作专题】java 实现多张图片合成PDF
  20. SDN 与 Mininet 概述

热门文章

  1. Mysql使用binlog恢复数据解决误操作问题的两种方法
  2. Keil : Cannot enter Debug Mode解决方法:
  3. c++ 异常处理(1)
  4. 解决boostrap-table有水平和垂直滚动条时,滚动条滑到最右边表格标题和内容单元格无法对齐的问题
  5. 毒霸duba劫持首页的解决方案(实测有效)
  6. 关于内层DIV设置margin-top不起作用的解决方案
  7. 使用Project Lombok是否安全? [关闭]
  8. 如何从类型创建新的对象实例
  9. 驰骋工作流携手山东金义,实施落地上海光大银行
  10. 深度学习训练,选择P100就对了