我正在使用两个节点包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 数据,但如果文件是从谷歌表或其他来源准备的,它会失败。仅当有人下载了我准备的文件时才有效。我怎样才能避免这种情况,你能建议如果有更好的方法来做到这一点