如何将变量、列表、字典数据保存为CSV并使用分号分隔符
解决CSV存储列表/字典数据及分隔符替换问题
核心需求
- 将长度未知的列表(
list)转为逗号分隔的字符串,存入单个CSV单元格 - 将字典数组(
dict)转为键值对逗号分隔的字符串,存入单个CSV单元格 - 用分号作为CSV字段分隔符,解决当前打开显示混乱的问题
具体实现步骤
1. 处理列表与字典的字符串转换
- 列表处理:直接使用数组的
join(',')方法,将数组元素拼接为逗号分隔的字符串 - 字典数组处理:先遍历每个字典,将键值对转为
key:value格式的字符串并拼接,再将所有字典的结果拼接为一个整体字符串
2. 替换CSV分隔符为分号
将CSV的表头分隔符、数据行分隔符全部替换为分号,避免单元格内的逗号与CSV字段分隔符冲突。
修改后的完整代码(controllers/data.js)
const fs = require('fs'); // 确保已引入fs模块 exports.saveData = async (req, res) => { try { const dataNew = new DataInfo({ name: req.body.name, surname: req.body.surname, age: req.body.age, list: req.body.listone, dict: req.body.dictone, }); console.log(dataNew); // 处理列表和字典数据,兼容空值情况 const listStr = req.body.listone?.join(',') || ''; const dictStr = req.body.dictone?.map(item => { return Object.entries(item).map(([key, value]) => `${key}:${value}`).join(','); }).join(',') || ''; // SAVED DATA START // 使用分号作为字段分隔符,去除多余空白保证格式规范 const data = ` name;surname;age;list;dict ${req.body.name};${req.body.surname};${req.body.age};${listStr};${dictStr} `.trim(); fs.writeFile("./data.csv", data, "utf-8", (err) => { if (err) console.log(err); else console.log("Data saved"); }); // SAVE DATA END const savedResult = await dataNew.save(); console.log(savedResult); res.status(savedResult ? 200 : 500).json({ isError: !savedResult }); } catch (error) { console.log(error); res.status(500).json({ isError: true }); } };
代码说明
- 加入空值兼容处理,避免数据为空时抛出异常
- 用
trim()清理模板字符串的多余空格和换行,保证CSV格式规范 - 字典数据转换为
key:value格式,保留原结构的可读性
内容的提问来源于stack exchange,提问作者Pisa Ponente
相关产品推荐
相关产品推荐

