【问题标题】:Chalenging nodejs CSV to JSON parsing problem挑战 nodejs CSV 到 JSON 解析问题
【发布时间】:2020-11-15 03:04:02
【问题描述】:

我目前面临一个特定问题。 我必须将 CSV 文件解析为 JSON,通常 csv-parser 运行良好,但是,这次我收到了一个带有糟糕分隔符的 CSV 文件:

线条看起来像

val||"val"||"val"||"val"

问题是您认为如何遍历所有 CSV 行并更改所有“||”到简单的昏迷?

这是我的解析代码:

const fs = require('fs')
const path = require('path')
const csv = require('csv-parser')

// Read CSV and Write to the JSON

const results = [];

fs.createReadStream('./CSV/users-test.csv')
  .pipe(csv({separator: '||'}))
  .on('data', (data) => results.push(data))
  .on('end', () => {      
      console.log(results);
      fs.writeFileSync('./OutputJSON/data.json', JSON.stringify(results),'utf-8', (err) => {
          if (err) console.log('That is bad')
      })
  });

这是我在 JSON 中得到的:

当所有用户的数据都用“,”分隔时,它可以工作,但我不知道如何查找和替换所有“||”在我解析之前保存在 CSV 文件中。

【问题讨论】:

  • 你快到了。看看string.replace。请注意,如果应用于整个输入文本,它将替换其中的每个出现。

标签: javascript node.js json csv parsing


【解决方案1】:

csv-parser 只允许一个字符的分隔符。您可以使用event-stream 将传入的文件预处理为行,然后删除讨厌的字段分隔符。像这样的东西......没有调试。

const fs = require('fs')
const path = require('path')
const csv = require('csv-parser')
const es = require('event-stream')

const results = [];

fs.createReadStream('./CSV/users-test.csv')
  .pipe(es.split())             // line by line
  .pipe(es.replace('||','|')    // turn || into |
  .pipe(csv({separator: '|'}))  // handle CSV with | separator
  .on('data', (data) => results.push(data))
  .on('end', () => {      
      console.log(results);
      fs.writeFileSync('./OutputJSON/data.json', JSON.stringify(results),'utf-8', (err) => {
          if (err) console.log('That is bad')
      })
  });

【讨论】:

  • 感谢您的快速回答,但是,以这种方式只返回 [ ] - 到 JSON 文件。由于某种原因,它不会将数据推送到数组中。
  • 在我评论 .pipe(es.split()) 之后 - 代码的工作方式与问题中的相同,但使用 .pipe(es.split()) 它只返回位于常量结果 = [];
猜你喜欢
  • 2012-10-07
  • 1970-01-01
  • 2018-09-18
  • 2018-01-03
  • 2021-11-06
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
相关资源
最近更新 更多