0

我正在使用两个节点包json2csv来生成 CSVcsvtojson并将 csv 转换回 json。

我的用例是我在生成 CSV 文件时尝试在 CSV 文件的第一行添加指令,并且在处理回 CSV 文件时我必须删除确切的第一行。

例如:-

在生成 CSV 文件时 ,假设我准备了一个 JSON

import { Parser } from "json2csv";
const json = [{"name": "foo","age": 22}, {"name": "bar","age": 23}];
const introductionText = `Please follow these instruction \n
 1. instruction 1, Do some activity \n
 2. instruction 2, Do something else \n
 3. instruction 3 \n
`
const json2csvParser = new Parser();
const generatedCsv = json2csvParser.parse(json);
const newCsv = introductionText + generatedCsv;

问题是当我将字符串连接到新的 CSV 时,它会将指令文本添加到 CSV 文件中,但所有指令 1、2、3 都在下一行。我希望所有指令只在第一行。我怎样才能做到这一点。我试过 \n , \r\n 没有任何效果。

目前我添加了特殊代码,比如\u2028引入新行,但我觉得这可能不正确。

我还没有弄清楚如何在文本中添加逗号。每当我添加它时,文本都会进入下一行。如何在不添加新行的情况下在单元格中添加逗号。

我的第二个问题如何先删除相同的介绍文本,然后将其传递给csvtojson模块。

在将 CSV 转换回 JSON 时编写了这样的代码

import * as csv from "csvtojson";
const csvStringWithIntruction = buffer.toString(); 
let csvStringWithoutInstruction;
if (isStringAndNotEmpty(csvStringWithIntruction)) {
   csvStringWithoutInstruction = csvStringWithIntruction.replace(/^"?\s*Please.+instruction\s*2\s*"?,*/gms, "").trim();
}
const stream = new Readable();
stream.push(csvStringWithoutInstruction);
stream.push(null);
cont jsonData = await convertCSVToJSONFromStream(stream);



async function convertCSVToJSONFromStream(readStream: Fs.ReadStream | Readable) {
    return csv.default()
        .fromStream(readStream)
        .subscribe((json) => {
            return new Promise((resolve,reject)=>{
                resolve(json);
            });
        }, onCSVParseError);
}

我得到了正确的 json 数据,但如果文件是从谷歌表或其他来源准备的,它会失败。仅当有人下载​​了我准备的文件时才有效。我怎样才能避免这种情况,你能建议如果有更好的方法来做到这一点

4

0 回答 0