NodeJS的async-csv库解析含JSON的CSV时丢失双引号如何解决
解决async-csv解析内嵌JSON的CSV时丢失双引号问题
问题原因
当前配置下async-csv的字段包裹符规则与你的CSV文件不匹配,默认会将JSON内部的双引号识别为CSV字段的包裹标记进行移除,导致JSON结构损坏。
解决方案
调整csv.parse的配置参数,明确指定CSV的字段包裹规则:
- 你的CSV示例中使用单引号
'包裹包含JSON的字段,需要手动指定quote参数为单引号,让库正确识别字段边界 - 配置
escape参数为双引号,避免JSON内部的双引号被误处理 - 关闭自动修剪空白的配置,防止JSON内容被意外修改
示例代码
const csv = require('async-csv'); const fs = require('fs/promises'); async function readCsvWithJson() { // 读取CSV文件内容 const fileContent = await fs.readFile('./你的文件路径.csv', 'utf-8'); // 传入自定义配置解析 const parseResult = await csv.parse(fileContent, { quote: "'", // 指定CSV字段的包裹符为单引号 escape: '"', // 指定转义符为双引号,匹配JSON语法 trim: false // 禁止自动修剪字段两端空白 }); // 此时解析得到的JSON字段会保留完整双引号,可直接解析 const jsonField = parseResult[0][1]; console.log(jsonField); // 输出 {"test":"help me"} const parsedJson = JSON.parse(jsonField); // 可正常解析 }
补充说明:如果你的CSV实际是用双引号作为字段包裹符,需要把
quote参数改为默认的",同时按照CSV规范将JSON内部的双引号转义为两个连续双引号(即把"替换为""),也能正常保留JSON结构。
内容的提问来源于stack exchange,提问作者user3508995
相关产品推荐
相关产品推荐

