Nodejs csv文件上传的强大工具,直接转成json数据。

Nodejs csv文件上传的强大工具,直接转成json数据。

安装模块:package.json 添加 “ya-csv”:"*“ 然后:切换到目录中 npm install var csv = require(‘ya-csv’); var nation = req.files.nation.path; var reader = csv.createCsvFileReader(nation, { ‘separator’: ‘,’, ‘quote’: '”’, ‘escape’: ‘"’, ‘comment’: ‘’, ‘columnsFromHeader’: ‘true’, }); reader.addListener(‘data’, function(data) { if (data) { Nation.create(data, function(err, nation) { if (err) { res.json({ code: ‘ERR’, msg: ‘err’ + err }); }; if (nation) { nation.save(); res.json({ code: ‘OK’, msg: sprintf(‘success’) }); }; }) }; }); ==================另一种上传方式 fs.readFile(fname, function(err, data) { var data = gbk_to_utf8.convert(data); var str = data.toString(); var lines = str.split(’\r\n’); var fields_name = []; fields_name = lines.shift().split(’,’); var items = []; for (var i = 0; i < lines.length - 1; i++) { var row = {}; var fields = lines[i].split(’,’); row.lng = fields.shift(); row.nation_code = fields.shift(); row.nation_name = fields.shift(); items.push(row); };

            if (items) {
                Nation.create(items, function(err, nation) {
                    if (err) {
                        res.json({
                            code: 'ERR',
                            msg: 'err' + err
                        });
                    };
                    if (nation) {
                        nation.save();
                        res.json({
                            code: 'OK',
                            msg: sprintf('success')
                        });
                    };
                })
            };
        })

6 回复

Node.js CSV 文件上传并转换为 JSON 数据

安装必要的模块

首先,在你的 package.json 文件中添加以下依赖:

{
  "dependencies": {
    "ya-csv": "^0.2.6",
    "express": "^4.17.1",
    "multer": "^1.4.3"
  }
}

然后执行安装命令:

npm install

示例代码

接下来,我们将使用 ya-csv 模块来读取上传的 CSV 文件,并将其转换为 JSON 对象。

const express = require('express');
const multer = require('multer');
const fs = require('fs');
const csv = require('ya-csv');

const app = express();

// 设置文件存储位置
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/')
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname)
  }
});

const upload = multer({ storage: storage });

app.post('/upload', upload.single('nation'), (req, res) => {
  const filePath = req.file.path;

  // 使用 ya-csv 解析 CSV 文件
  const reader = csv.createCsvFileReader(filePath, {
    separator: ',',
    quote: '"',
    escape: '"',
    comment: '',
    columnsFromHeader: true
  });

  let data = [];

  reader.addListener('data', function (dataObj) {
    data.push(dataObj);
  });

  reader.addListener('end', function () {
    // 将数据保存到数据库(这里假设有一个名为 Nation 的模型)
    Nation.create(data, function (err, nations) {
      if (err) {
        return res.status(500).json({
          code: 'ERR',
          msg: 'Error saving to database: ' + err
        });
      }

      return res.status(200).json({
        code: 'OK',
        msg: 'Success'
      });
    });
  });
});

app.listen(3000, () => console.log('Server started on port 3000'));

说明

  1. 依赖模块:

    • express: 用于创建 Web 服务器。
    • multer: 用于处理文件上传。
    • ya-csv: 用于解析 CSV 文件。
  2. 文件上传:

    • 使用 multer 来处理文件上传。将上传的文件存储在 uploads/ 目录下。
  3. CSV 文件解析:

    • 使用 ya-csv 创建一个 csvFileReader 实例来读取 CSV 文件。
    • 将每一行数据添加到数组 data 中。
  4. 数据处理:

    • 当读取完成时,调用 Nation.create 方法将数据保存到数据库。
    • 如果发生错误,则返回错误信息;否则,返回成功信息。

这样,你就可以通过简单的 HTTP POST 请求上传 CSV 文件,并将其转换为 JSON 格式后保存到数据库中。


那啥 应该把“ya-csv”地址贴出来啊

请问你的 Nation.create 是哪来的

Nation.是模型对象,Nation.create的意思是创建当前对象,最后保存,这都是mongoose 中的,用来操作mongodb的。

在Node.js中,处理CSV文件并将其转换为JSON数据是一项常见的任务。你可以使用csv-parser库来简化这一过程。以下是如何实现这一功能的示例代码:

首先,你需要安装csv-parser库:

npm install csv-parser

接下来是具体的代码示例:

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

// 假设文件路径是 './example.csv'
fs.createReadStream('./example.csv')
  .pipe(csv())
  .on('data', (data) => {
    console.log(JSON.stringify(data)); // 打印每一行的数据作为JSON对象
  })
  .on('end', () => {
    console.log('CSV文件已处理完毕');
  });

解释

  1. 安装库:

    npm install csv-parser
    
  2. 读取文件并解析:

    • 使用fs.createReadStream创建一个可读流。
    • 使用.pipe(csv())将流传递给csv-parser进行解析。
    • csv-parser会自动将每行CSV数据转换为一个对象(JSON)。
  3. 处理每一行数据:

    • data事件会在每次读取到一行数据时触发,并将该行数据作为JSON对象传递。
    • 这里我们简单地打印每一行数据,但你可以根据需要进行处理。
  4. 处理完成:

    • end事件会在整个文件处理完成后触发,可以在这里添加一些清理或总结操作。

这种方法简洁且易于理解,适用于大多数简单的CSV到JSON转换需求。

回到顶部