我正在尝试在NetSuite中生成 Google Shopping 商品数据源,其中包含30,000多个项目。NetSuite是一个客户关系管理系统,运行服务器端JavaScript,并调用Suitescript 2.0。本质上,它只是带有几个限制的JavaScript。我的任务是将此产品数据源输出为CSV文件。
问题在于这些项目的产品描述包含变量数量的逗号、双引号、单引号和HTML。起初,只有逗号会导致问题,所以经过一段时间的研究后,我将要输出的字符串用双引号括起来。
然而,似乎这些双引号与字符串内部的双引号交互起来会导致一些奇怪的格式问题,尽管我的sanitizeString()函数应该对它们进行转义。每当描述中包含双引号时,下一行就不会单独成行,而是被附加到最后一列。
因此,我自然而然地对外部引号进行了转义,如下所示:
问题在于这些项目的产品描述包含变量数量的逗号、双引号、单引号和HTML。起初,只有逗号会导致问题,所以经过一段时间的研究后,我将要输出的字符串用双引号括起来。
//This function isn't terribly important, but is referenced below
function sanitizeString (desc) {
var itemDesc;
if (desc) {
itemDesc = desc.replace(/(\r\n|\n|\r|\s+|\t| )/gm,' ');
itemDesc = itemDesc.replace(/,/g, '\,');
itemDesc = itemDesc.replace(/"/g, '\"');
itemDesc = itemDesc.replace(/'/g, '\'');
itemDesc = itemDesc.replace(/ +(?= )/g,'');
} else {
itemDesc = '';
}
return itemDesc;
}
var row = '';
for (var i = 0; i < columns.length; i++) {
var col = columns[i];
row += '"' + sanitizeString(val[col]) + '"';
if (i != columns.length - 1) {
row += ',';
}
}
newFeed.appendLine({value: row});
然而,似乎这些双引号与字符串内部的双引号交互起来会导致一些奇怪的格式问题,尽管我的sanitizeString()函数应该对它们进行转义。每当描述中包含双引号时,下一行就不会单独成行,而是被附加到最后一列。
因此,我自然而然地对外部引号进行了转义,如下所示:
row += '\"' + sanitizeString(val[col]) + '\"';
这样做会使事情彻底失控,许多项目不会被推到新行,而我可以使用的列数达到最大值,因为它只是继续进行。
另一个自然的解决方案是编辑产品描述,但我不想为30,000多个项目做那件事...
有人知道这里可能出了什么问题吗?我觉得我忽略了一些非常简单的东西...
'\\,'
而不是'\,'
,或者对于包含单引号的字符串,可以使用'\\\''
或"\\'"
。 - nnnnnnHello, good bye
,则输出应为Hello\, good bye
,对吗?对于CSV,考虑到您正在删除换行符并将每个字段放入双引号中,我认为只需要转义双引号-尽管出于某种原因,您似乎将整个行放入双引号中,这对于CSV来说并不正常。请[编辑]您的问题以显示示例两行输入及相应的期望输出。 - nnnnnn