如何在Mule 4中将含引号内嵌逗号的CSV转换为JSON
Mule CSV转JSON引号解析异常解决方案
问题根因
异常由CSV解析参数配置错误直接导致:
file:listener中配置的quote='将单引号设为CSV字段包裹符,但你输入的CSV里Address字段用双引号包裹,解析器无法识别双引号为包裹边界,直接将Address内部的逗号识别为字段分隔符,导致字段拆分错乱,原Phone字段内容丢失- 配置的
escape="\\"指定反斜杠为转义符,但标准CSV中双引号包裹字段内的双引号是用两个双引号转义,转义规则不匹配导致引号解析异常
解决方案
步骤1:修改file listener的CSV解析参数
将outputMimeType中的包裹符、转义符修改为匹配你输入CSV的双引号规则,修改后的完整流程配置如下:
<flow name="csv-Flow"> <file:listener doc:name="File" directory="${path}" config-ref="File-Inbound" outputMimeType="application/csv; quote="""; escape="""; separator=","; header=true"> <scheduling-strategy> <fixed-frequency frequency="${frequency}"/> </scheduling-strategy> </file:listener> <set-payload value='#[%dw 2.0 output application/json --- payload map { "Name": $.Name, // 若需要Address为嵌套JSON对象而非字符串,替换为 "Address": read($.Address, "application/json") "Address": $.Address, "Phone": $.Phone }]' doc:name="Set Payload"/> <logger level="INFO" doc:name="Logger" message="#[payload]"/> </flow>
步骤2:按需调整Address字段输出格式
- 若需要Address为字符串格式:标准JSON规范要求字符串内部的双引号必须转义,输出时自动添加的
\属于合规格式,符合JSON解析要求 - 若需要Address为嵌套JSON对象:使用
read($.Address, "application/json")将字符串解析为JSON对象即可,输出时不会有额外转义
验证效果
修改配置后重新运行流程,即可正确拆分3个字段,Phone字段值为123456789,Address字段包含完整的JSON内容,符合预期。
内容的提问来源于stack exchange,提问作者SkyC
相关产品推荐
相关产品推荐

