数据编织无法在双引号内转义字符串 - Mule ESB

时间:2015-10-30 02:01:33

标签: mule mule-studio mule-component dataweave

我正在尝试将csv转换为csv。我的deliliter是,,输入中有一些文本,也有逗号示例:"Fun,Chair,tables"但它将用引号括起来。 Data Weave认为这是分隔符,并在响应中分成不同的列。

请找到输入CSV文件

 sequence,items
 1,Fun
 2,"Fun,chairs,tables"
 3,Games

但是得到回应

Number,itemDetails
1,Fun
2,Fun\,Chair\,tables
3,Games

在上面的回复中,第二个是分裂的,我没想到 我的dataweaver

  %dw 1.0
  %output application/csv header=true 
   ---
  payload map { 
   Number:$.sequence,
   itemDetails:$.items

预期回应是

 Number,itemDetails
 1,Fun
 2,"Fun,chairs,tables"
 3,Games

这里的问题是"Fun,chairs,tables",双引号应该作为测试字段,而data weaver将其视为分隔符。 在Data weave标头中,尝试使用quote= " "escape=" "。但不行。 我在Datamapper上尝试过相同的工作,完美无缺。相信有些事情需要在标题上完成,不知道是什么,但?? 还检查了Data Weave CSV设置中读取配置属性中的属性。没有帮助。

编辑: 使用DataWeaver转义序列, %output application/csv header=true escape="\"" 以下是回复

Number,itemDetails
1,Fun
2,Fun",Chair",tables
3,Games

您的想法和建议会有所帮助。提前谢谢。

4 个答案:

答案 0 :(得分:1)

您是否尝试过escape =“\”“?我认为这会逃避双引号

答案 1 :(得分:0)

尝试

%output application/csv quoteValues=true ,escape =" "

答案 2 :(得分:0)

您可以自己将值括在引号中

%dw 1.0
%output application/csv header=true
---
payload map ((item , index) -> {
    Number: item.sequence,
    itemDetails: item.items
} when index != 1
otherwise {
    Number: item.sequence,
    itemDetails: "\"" ++ item.items ++ "\""
})

<强>输出

Number,itemDetails
1,Fun
2,"Fun\,chairs\,tables"
3,Games

答案 3 :(得分:0)

我们必须像下面那样更改reader属性。在读取csv输入时,我也遇到了同样的问题。

<dw:reader-property name="escape" value="&quot;"/>

以上针对我的案例可以解决