applicationcontext.getbean返回的对象无法转换成json_在JavaScript应用中将CSV转换为JSON...

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

a307fce06718589fb827b2e998e72f54.png

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_namejohn,smithjane,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_namejohn,smithjane,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,smithjane,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,这样我们就可以用自己喜欢的方式处理它们。

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


来源:https://levelup.gitconnected.com,作者:John Au-Yeung,翻译:公众号《前端全栈开发者》

如果对你有所启发和帮助,可以点个关注、收藏、转发,也可以留言讨论,这是对作者的最大鼓励。

作者简介:Web前端工程师,全栈开发工程师、持续学习者。

私信回复大礼包送某网精品视频课程网盘资料,准能为你节省不少钱!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值