我正在尝试在 NetSuite 中生成包含 30,000 多个商品的 Google 购物提要,这是一个运行服务器端 JavaScript 的 CRM 系统,它调用 Suitescript 2.0。本质上,它只是带有更多限制的 JavaScript。我的任务是将此产品提要输出为 CSV。
问题是这些项目的产品描述包含可变数量的逗号、双引号、单引号和 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 多个项目这样做......
有人知道这里可能会发生什么吗?我觉得我忽略了一些非常简单的事情......