Nodejs 导出json,csv格式

Nodejs 导出json,csv格式

var nation_export_save = function(req, res) { var encode = req.body.encode;(encode为‘utf8’ or ‘GBK’) var sname = req.body.sname; var items = req.body.items; Nation.find({}, function(err, nations) { if (sname == ‘JSON’) { res.attachment(‘nation.txt’); res.send(nations); } else if (sname == ‘CSV’) { var ites = []; var lines = items.split(’,’); for (var i = 0; i < lines.length; i++) { ites.push(lines[i]); }; json2csv({ data: nations, fields: ites }, function(err, csv) { var iconv = new Iconv(‘UTF-8’, encode); content = iconv.convert(csv); res.attachment(‘nation.csv’); res.send(content); })

    };
})

}


2 回复

Node.js 导出 JSON 和 CSV 格式

在处理数据导出时,我们经常会遇到需要将数据以不同的格式(如 JSON 或 CSV)进行导出的需求。本文将展示如何使用 Node.js 来实现这一功能,并提供一些示例代码来帮助你更好地理解。

示例代码

首先,我们需要安装一些必要的依赖库,例如 iconv-lite 用于字符编码转换,以及 json2csv 用于将 JSON 数据转换为 CSV 格式。

npm install json2csv iconv-lite

接下来,我们编写一个简单的 Express 路由处理程序,该程序根据请求参数的不同,导出 JSON 或 CSV 文件。

const express = require('express');
const json2csv = require('json2csv').parse;
const fs = require('fs');
const iconv = require('iconv-lite');

const app = express();

app.post('/export', (req, res) => {
    const encode = req.body.encode || 'utf8'; // 默认编码为 utf8
    const sname = req.body.sname;
    const items = req.body.items;

    // 假设 Nation 是一个 Mongoose 模型
    Nation.find({}, (err, nations) => {
        if (err) {
            return res.status(500).send({ error: 'Database query failed' });
        }

        if (sname === 'JSON') {
            res.attachment('nation.json');
            res.send(JSON.stringify(nations, null, 2));
        } else if (sname === 'CSV') {
            let fields = items.split(',').map(item => item.trim());
            const csv = json2csv(nations, { fields });

            // 转换编码
            const content = iconv.encode(csv, encode);

            res.attachment('nation.csv');
            res.send(content);
        }
    });
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

代码解释

  1. 依赖库安装

    • json2csv 用于将 JSON 数据转换为 CSV 格式。
    • iconv-lite 用于字符编码转换。
  2. 路由处理

    • 使用 app.post('/export', ...) 定义一个 POST 请求的路由。
    • 从请求体中读取 encodesnameitems 参数。
    • 查询数据库中的所有国家数据。
    • 根据 sname 的值判断是要导出 JSON 还是 CSV。
  3. JSON 导出

    • 如果 snameJSON,则直接将 JSON 格式的字符串发送给客户端。
    • 设置响应头,使浏览器下载文件而不是直接显示内容。
  4. CSV 导出

    • items 字符串拆分成数组,并去除空格。
    • 使用 json2csv 将 JSON 数据转换为 CSV 格式。
    • 使用 iconv-lite 对 CSV 内容进行编码转换。
    • 设置响应头并发送转换后的 CSV 内容。

通过上述代码,你可以轻松地实现将数据以 JSON 或 CSV 格式导出的功能。希望这对你的项目有所帮助!


为了实现 Node.js 中导出 JSON 和 CSV 文件的功能,可以使用一些流行的库来简化这个过程。以下是一个具体的示例代码,展示了如何根据 req.body.sname 的值将数据导出为 JSON 或 CSV 格式,并处理编码问题。

示例代码

首先,确保安装所需的依赖项:

npm install mongoose json2csv iconv-lite

然后,更新你的代码如下:

const mongoose = require('mongoose');
const json2csv = require('json2csv').parse;
const fs = require('fs');
const iconvLite = require('iconv-lite');

// 假设 Nation 是一个 Mongoose 模型
const Nation = mongoose.model('Nation', new mongoose.Schema({}));

var nation_export_save = async function(req, res) {
    const encode = req.body.encode || 'utf8'; // 默认为 utf8
    const sname = req.body.sname || 'JSON';
    const items = req.body.items;

    try {
        const nations = await Nation.find({});
        
        if (sname === 'JSON') {
            res.attachment('nation.json');
            res.send(JSON.stringify(nations));
        } else if (sname === 'CSV') {
            let fields = items ? items.split(',').map(item => item.trim()) : Object.keys(nations[0]._doc);

            const csv = json2csv(nations, { fields });
            const content = iconvLite.encode(csv, encode);
            
            res.attachment('nation.csv');
            res.send(content);
        }
    } catch (err) {
        console.error(err);
        res.status(500).send('An error occurred while exporting the data.');
    }
};

解释

  1. 导入必要的模块:我们使用了 mongoose 来处理数据库查询,json2csv 来生成 CSV 文件,以及 iconv-lite 来处理不同编码。

  2. 定义异步函数:由于数据库查询是异步的,我们将 nation_export_save 函数定义为异步函数。

  3. 获取请求参数:从 req.body 获取 encodesnameitems 参数。

  4. 查询数据库:使用 Nation.find({}) 查询所有国家的数据。

  5. 处理 JSON 输出:如果 sname"JSON",则直接发送 JSON 格式的字符串。

  6. 处理 CSV 输出:如果 sname"CSV",则使用 json2csv 库将数据转换为 CSV 格式。我们还处理了 items 参数以指定要导出的字段,并且使用 iconv-lite 处理编码转换。

  7. 错误处理:使用 try-catch 结构来捕获并处理可能发生的错误。

这样,你可以根据前端传来的参数灵活地输出 JSON 或 CSV 文件,并支持不同的字符编码。

回到顶部