Azure Logic App中替换转义双引号CSV字符串内的逗号
解决Azure Logic App中CSV转JSON时引号内逗号导致的拆分问题
解决方案思路
由于供应商提供的CSV中,带引号的字段内部包含逗号,直接拆分会导致字段被错误分割。我们可以通过以下步骤处理:
- 先用正则表达式匹配所有双引号(含转义引号)包裹范围内的逗号,将其替换为一个临时占位符
- 对处理后的CSV按逗号拆分字段
- 再将占位符替换回逗号,最后转换为JSON
正则表达式与JavaScript代码实现
第一步:替换引号内的逗号为占位符
在Azure Logic App的「JavaScript代码」动作中,使用以下代码替换引号内的逗号:
// 从动态内容获取原始CSV字符串 const originalCsv = workflowContext.actions.Get_CSV_Content.outputs.body; // 匹配双引号内的逗号,替换为自定义临时占位符 const processedCsv = originalCsv.replace( /(?<=["](?:\\.|[^"\\])*?)[,](?=(?:\\.|[^"\\])*?["])/g, '__INTERNAL_COMMA__' ); return processedCsv;
正则表达式说明
(?<=["](?:\\.|[^"\\])*?):正向回溯断言,确保逗号前是未转义的双引号,且已匹配了任意数量的转义字符(如\")或非引号/非转义字符[,]:匹配需要替换的目标逗号(?=(?:\\.|[^"\\])*?["]):正向预查,确保逗号后会匹配到未转义的双引号,中间可包含转义字符或非引号/非转义字符
第二步:拆分CSV并恢复内部逗号
拆分处理后的CSV后,用以下代码将占位符还原为逗号:
// 从动态内容获取拆分后的字段数组 const splitFields = workflowContext.actions.Split_CSV.outputs.body; // 还原占位符为逗号 const restoredFields = splitFields.map(field => field.replace(/__INTERNAL_COMMA__/g, ',')); return restoredFields;
第三步:转换为JSON
将恢复后的字段数组按表头映射为JSON对象,可直接使用Azure Logic App的「创建JSON」动作完成。
注意事项
- 临时占位符
__INTERNAL_COMMA__需选择不会出现在CSV内容中的字符串,避免替换时出现冲突 - 该正则支持识别转义双引号(如
"He said \"hello\""),不会误判引号范围
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

